1. 前言
上一篇Maven学习之入门一简单介绍了Maven的安装和Myeclipse的配置。现在结合实例来讲述如何使用Maven以及Maven项目的细节知识。
2. 创建Maven项目
2.1 利用myeclipse创建maven项目
以创建一个webapp项目为例:
1. new->other->选择maven项目。
2.选择项目存放地址:
3. 选择“maven-archetype-webapp”创建一个webapp目录结构的项目
4.填写Group Id,Artifact Id,和Package并finish完成项目构建
5. 构建好的maven项目如下:
maven项目采用“约定优于配置”的原则,src/main/java用于存放源代码,src/main/test用于存放单元测试代码,src/target用于存放编译、打包后的输出文件。这是maven项目的通用约定。如果构建的maven项目目录中不存在src/main/java和src/main/test目录,可以手动添加。
src\main\resources文件夹是用来存放资源文件的,maven工程目录中如果没有resources文件夹,而且项目需要配置XXX.properties这样的配置文件,那么就要在src\main文件夹下手动新建resources文件夹,并将XXX.properties文件放入其中。test需要用到资源文件,类似放到src\test下。
2.2 在myeclipse导入maven项目
如果存在一个maven项目,我们需要将其导入myeclipse中,过程如下:
1. 右键->导入:选择existing maven projects.
2.导入存放的maven项目,然后点击finish
3. maven的使用
3.1 编写pom文件
pom文件是maven项目的核心,定义了项目的基本信息、maven build项目所需的配置信息以及依赖的管理。
project元素是pom.xml文件的根元素。modelVersion指定了POM模型的版本,Maven2和Maven3的modelVersion值都是4.0.0。
这段内容中最重要的是groupId,artifactId,version。这三个元素定义了一个项目的基本坐标。groupId定义了项目属于哪个组,这个组和项目所属公司和组织有关,比如公司名为mycompany,项目名为myproject,则groupId可以为com.mycompany.myproject。artifactId定义了当前的Maven项目在myproject项目中的唯一ID标识。项目里java类的package的一般定义为:com.mycompany.myproject.artifactId,一般与POM定义的groupId和artifactId保持一致,这要是为了方便maven搜索构件和java类,逻辑也很清晰。version则定义了当前项目的版本号,0.0.1-SNAPSHOT表明该项目处于开发阶段,不太稳定,随着项目的推进,版本也会更新。
name元素则声明了一个比较友好的项目名称,不是必须设置的。url元素声明了maven项目官网地址。
3.2 常用maven命令的介绍
3.2.1 mvn命令常用参数
mvn -e 显示详细错误
mvn -U 强制更新snapshot类型的插件或依赖库(否则maven一天只会更新一次snapshot依赖)
mvn -o 运行offline模式,不联网更新依赖
mvn -N 仅在当前项目模块执行命令,关闭reactor
mvn -pl module_name在指定模块上执行命令
mvn -ff 在递归执行命令过程中,一旦发生错误就直接退出
mvn -Dxxx=yyy 指定java全局属性
mvn -Pxxx 引用profile xxx
mvn -U 强制更新snapshot类型的插件或依赖库(否则maven一天只会更新一次snapshot依赖)
mvn -o 运行offline模式,不联网更新依赖
mvn -N 仅在当前项目模块执行命令,关闭reactor
mvn -pl module_name在指定模块上执行命令
mvn -ff 在递归执行命令过程中,一旦发生错误就直接退出
mvn -Dxxx=yyy 指定java全局属性
mvn -Pxxx 引用profile xxx
3.2.2 Build Lifecycle用的命令
mvn test-compile 编译测试代码mvn test 运行程序中的单元测试
mvn clean 用于清理输出目录target/
mvn compile 编译项目
mvn package 打包,此时target目录下会出现maven-quickstart-1.0-SNAPSHOT.jar文件,即为打包后文件
mvn install 打包并安装到本地仓库,此时本机仓库会新增maven-quickstart-1.0-SNAPSHOT.jar文件。
mvn compile 编译项目
mvn package 打包,此时target目录下会出现maven-quickstart-1.0-SNAPSHOT.jar文件,即为打包后文件
mvn install 打包并安装到本地仓库,此时本机仓库会新增maven-quickstart-1.0-SNAPSHOT.jar文件。
mvn deploy将最终的包复制到远程仓库
执行以上命令时,clean是不会自动执行的,因为clean和其他5个命令是不同的生命周期,因此需要使用组合命令,如mvn clean install。
执行以上命令时,clean是不会自动执行的,因为clean和其他5个命令是不同的生命周期,因此需要使用组合命令,如mvn clean install。
3.3 案例说明
3.3.1 编写主代码和测试代码
项目的主代码和测试代码不同,项目的主代码会被打包最后的jar/war包中,而测试代码不会。
案例环境:spring4, maven3, jdk8。
主代码:
package com.example.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@Controller
public class HomeController {
@RequestMapping(value={"/","/index"}, method = RequestMethod.GET)
public String getHomePage(){
return "index";
}
}
测试代码:典型的单元测试有三个步骤:1. 准备要测试的类和数据。2. 执行测试的行为。 3.检查测试结果。本实例测试控制器是否返回期望的String值。值得注意的是需要执行的测试方法名约定以test开头。
package com.example.controller;
import junit.framework.Assert;
import org.junit.Test;
public class HomeControllerTest {
@Test
public void testHomeController(){
// 创建控制器的一个实例
HomeController hc = new HomeController();
// 判断返回值
String str = hc.getHomePage();
Assert.assertEquals("index", str);
}
}
pom文件中依赖编写:包括junit,spring。
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.7</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.3.8.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>4.3.8.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>4.3.8.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.3.8.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.3.8.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>4.3.8.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>4.3.8.RELEASE</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.0-b05</version>
</dependency>
</dependencies>
3.3.2 maven命令的执行
1. mvn clean: 通过查看信息可知,清楚了target目录的内容。
2. mvn test:如果出现错误,信息会说明错误的原因。