引言

现代软件项目工程越来越庞大,项目结构也越来越复杂,全手工开发在开发大型项目时就会十分繁琐,总会重复一些重要但十分无趣的工作,十分影响开发效率,为解决这些问题就需要借助项目管理工具,可以最大程度的减少人在构建项目上工作量,让人力更多集中到编码上。

Maven简介

Maven是Java界一个十分成熟的项目管理工具,功能完善使用十分方便。Maven主要功能有:管理jar包,编译程序,批量测试代码,自动打包项目,自动部署项目。

JAVA项目汇总管理 java项目管理器_jar包

管理jar包

java开发难免会用到外部java资源,传统添加jar包方式需要手工寻找jar包,人工管理jar包版本很麻烦,使用Maven只需要添加几行命令Maven就会自动寻找jar包。

批量测试代码

使用Maven进行测试可以将测试代码与原代码分离,可以批量测试生成测试报告。

自动打包项目

有些jar包只在开发过程中使用,实际发布并不需要这些jar包(比如servlet包jsp包),手工打包项目就很麻烦,Maven中只需要加一行代码就能设置jar包的是否参与打包,是否只参与测试。

Maven使用方法

Maven总共有九大核心概念,简单了解下就能很轻松的使用Maven,本文先说其中六个最基本的概念,其他的后续再说。

九大核心概念
1、POM

POM叫做项目对象模型,Maven将一个项目看做一个模型来管理,也就是一个叫做pom.xml的文件,项目的所有配置都以标签的形式保存在这个文件中,这个文件是Maven的核心文件。

2、约定的目录结构

Maven项目创建时一般会有项目模板,帮助我们快速创建项目,分类文件,初始的项目结构是这样的:
├─src
│ ├─main
│ │ ├─java 存放源码
│ │ └─resources 存放配置文件
│ └─test
│ ├─java 存放测试代码
│ └─resources 存放测试配置文件
└─target 编译生成的结果

3、坐标概念

如果想在Maven项目中引入外部包,就需要在pom.xml文件中添加依赖,告知Maven项目构建时寻找这些包,网络上的包有浩如烟海就需要坐标来确定一个包。坐标英文叫做GAV是三个单词的首字母:GroupId、ArtifactId、Version,标识开发项目组名称,项目名称,和版本三个元素确定一个jar包,现在用途比较广泛的包基本都支持Maven坐标,比如MySQL驱动,可以在这个网址查找 https://mvnrepository.com/.

JAVA项目汇总管理 java项目管理器_maven_02

4、依赖管理

如何添加依赖?
将查询到的jar包的坐标写入到pom.xml文件中

<dependencies>
        <!--加入servlet依赖-->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>

如何设置包使用范围,上面scope标签中设置的是provided标识此包只用于编译调试阶段,不会参与打包。scope可以设置的值包括:

命令

含义

compile

此依赖参与项目的所有阶段

provided

此依赖不参与打包

test

此依赖只用于测试阶段

5、仓库管理

Maven有两种类型仓库,一是本地仓库,二是远程仓库,在项目构建构建过程中,Maven会根据pom.xml的依赖项先去本地仓库寻找资源,如果无法找到就会去远程仓库下载。因此初次使用Maven构建工程可能比较慢,因为本地仓库资源不多需要到远程仓库下载。本地仓库默认存放在C盘,如果想更改仓库位置需要修改Maven软件的配置文件(apache-maven-3.3.9\conf\settings.xml)中的

6、生命周期

生命周期表示项目构建过程中的每一个阶段,清除,编译,测试,打包,安装等,使用Maven命令可以选择不同阶段调试项目,方便快捷。不过大多数情况下Maven一般是配合IDE一起使用,因此Maven命令在实际开发中用的并不多。

Maven在idea中的使用

大多数情况下Maven都是配合IDE一起使用的,所以重点说说Maven在idea使用方法,我的idea版本是2019.3.3,不同版本配置方法可能略有不同。
idea中内置了一个Maven但一般不用这个,因为内置Maven不好配置不够灵活,我们需要引入外部的Maven替代它。

Maven在idea中的配置

1、点击File->Setting->Maven主要是设置外部Maven路径和本地仓库路径

JAVA项目汇总管理 java项目管理器_java_03


2、设置JRE路径,设置一个Option这个设置能够减少项目的构建时间

JAVA项目汇总管理 java项目管理器_java_04

创建web项目

本文将构建一个简单的web项目,进行整个项目的全部工作包括创建,编码,测试,发布等,会使用servlet,jsp,tomcat等资源。

1、创建项目后添加模块选择Maven使用项目原型帮助我们快速构建项目

JAVA项目汇总管理 java项目管理器_java_05


2、设置项目坐标

JAVA项目汇总管理 java项目管理器_ide_06


3、点击finish等待项目构建完成,首次构建项目Maven需要下载很多依赖构建很慢,之后就会很快了,显示BUILD SUCCESS标识构建成功

JAVA项目汇总管理 java项目管理器_maven_07


4、添加依赖,项目需要使用servlet包和jsp包,在pom.xml文件中添加对这两个文件的依赖。

<dependencies>
    	.......省略
        <!--加入servlet依赖-->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>jsp-api</artifactId>
            <version>2.1</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>

5、在main/webapp目录下修改index.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <h1>hello world</h1>
</body>
</html>

6、添加servlet服务,在main/java中添加一个servlet文件,文件代码如下

public class oneServlet extends HttpServlet {
    public int add(int n1, int n2){
        return n1+n2;
    }
    public int add2(int n1, int n2){
        return n1+2*n2;
    }
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    }
}

7、测试代码
1)在test/java添加测试类文件代码如下

public class TestOneServlet {
    @Test
    public void testAdd(){
        oneServlet one = new oneServlet();
        Assert.assertEquals(one.add(10,20),30);
    }

    @Test
    public void testAdd2(){
        oneServlet one = new oneServlet();
        Assert.assertEquals(one.add2(10,20),30);
    }
}

2)执行测试,测试报告,表示测试函数testAdd2测试失败

TestOneServlet.testAdd2:17 expected:<50> but was:<30>

3)修改代码使其测试通过,编译通过但测试不通过也是不能打包的

8、配置tomcat服务器进行web测试

JAVA项目汇总管理 java项目管理器_ide_08


9、测试完成打包工程

JAVA项目汇总管理 java项目管理器_JAVA项目汇总管理_09


10、将打包生成的untitledweb.war文件(在项目的target目录中)放到tomcat服务器的webapps目录中。

11、启动tomcat服务

12、在浏览器输入http://localhost:8080/untitleweb/,访问正常项目完成!