第10章 从Maven2中运行JUnit测试
10.1 Maven的功能
Maven不仅仅是一个构建工具,以下是Maven的一些核心原则。
10.1.1 约定优于配置
约定优于配置(Convention over configuration)是Maven项目最强大的原则之一。
![11165425_feDI.png](http://static.oschina.net/uploads/img/201412/11165425_feDI.png)
10.1.2 强大的依赖管理
Maven通过中心仓库来存储、管理依赖,本地工程通过本地仓库与中心库下载各种依赖。
![11165425_7U5K.png](http://static.oschina.net/uploads/img/201412/11165425_7U5K.png)
10.1.3 Maven的构建生命周期
Maven另一条强大原则是
构建生命周期(build lifecycle)。
3个内置生命周期:
Default:用于生成项目的工作。
Clean:用于清理项目。
Site:用于生成项目的文档。
每个生命周期都包含了几个阶段(phase),
在Default生命周期的所有阶段如下:
Validate:验证项目是正确的,并且所有必要的信息都是可获得的。
Compile:编译项目的源代码。
Test:使用一个合适的单元测试框架来测试编译好的源代码。这些测试应该不会要求代码被打包或部署。
Package:将编译好的代码打包成可以发布的格式,如JAR。
Integration test:如果有必要,将发布包处理和部署到一个可以运行集成测试的环境中。
Verify:运行任何检查来证实该发布包是有效的并符合质量标准的。
Install:将发布包安装到本地仓库中,以便用作其他本地项目中的一个依赖库。
Deploy:在一个集成或者发布环境,为了与其他的开发人员和项目进行共享,将最终版的发布包复制到远程仓库中。
如果调用以上的任何一个,他们都会从最开始的validate运行,依次运行,直到你调用的那个。比如,mvn test,会依次运行validate、compile、test。
10.1.4 基于插件的架构
Maven是一个基于插件的框架,它的功能都要插件去完成。(当然,核心的插件安装Maven时会一起安装)
<build>
<plugins>
<plugin>
<groupId>org.apache.cactus</groupId>
<artifactId>cactus.integration.maven2</artifactId>
<version>1.8.1-SNAPSHOT</version>
</plugin>
</plugins>
</build>
|
10.1.5 Maven项目对象模型
Maven配置文件pom.xml,取自于Project Object Model的简写。
简单的pom.xml
![11165425_vHvi.png](http://static.oschina.net/uploads/img/201412/11165425_vHvi.png)
pom.xml是可以继承的,下面是一个父项目的配置(
注意packaging的类型),包含一个子模块example-module(
目录名,而不是artifactId):
![11165426_m5Bz.png](http://static.oschina.net/uploads/img/201412/11165426_m5Bz.png)
下面是子模块的pom.xml,它继承了上面的pom.xml
<project>
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.manning.junitbook</groupId>
<artifactId>example-pom</artifactId>
<version>2.0-SNAPSHOT</version>
</parent>
<artifactId>example-child
</artifactId>
</project>
pom能从父pom继承所有的元素:
包括依赖库、开发者和贡献者、插件列表、报告列表、ID匹配的插件执行、插件配置
10.2 建立一个Maven项目
安装Maven
1、下载,解压到一个目录下
2、定义环境变量M2_HOME,指向解压目录
3、将M2_HOME\bin 添加到 PATH 中
Maven配置文件settings.xml
settings.xml默认在M2_HOME\conf录入下,将它copy一个到的配置用户目录的.m2目录下,在我的本机是这里:“C:\Users\Neil\.m2”
然后打开它,在settings下加入,指定本地库的目录。
<localRepository>D:\maven_repo</localRepository>
![](http://static.oschina.net/uploads/img/201412/11165426_kelR.png)
当然也可以做其他设置,比如设置Nexus私服等,使得你本地所有的项目都可以使用这个私服。
用命令行建立Maven项目
用命令行进入我们的工作目录,然后执行以下命令:
mvn archetype:create -DgroupId=com.manning.junitbook -DartifactId=maven-sampling -DarchetypeArtifactid=maven-artifact-mojo
这个命令会依赖maven-archetype-plugin插件,如果没有会自动下载,下载完成后自动执行命令,创建Maven示例项目。
当然这是通过命令行建立的,我们需要把它导入Eclipse,才能在IDE里写代码,如下图:
![11165426_3c0E.png](http://static.oschina.net/uploads/img/201412/11165426_3c0E.png)
当然这还有个前提,就是安装m2e
安装m2e插件,如果你用的是标准的JavaEE Eclipse(即已有WTP),请安装如下图版本:
![11165427_tyOb.png](http://static.oschina.net/uploads/img/201412/11165427_tyOb.png)
在Eclipse里创建Maven项目
这个Step by Step 就好了 不废话了。
![11165431_vY6t.png](http://static.oschina.net/uploads/img/201412/11165431_vY6t.png)
设置m2e
在Eclipse菜单选择Windows->Preferences->Maven
![11165431_FjZi.png](http://static.oschina.net/uploads/img/201412/11165431_FjZi.png)
在Maven->Installations 默认使用Eclipse自带的maven,这里可以设置使用自己的maven。
![11165431_AKeJ.png](http://static.oschina.net/uploads/img/201412/11165431_AKeJ.png)
在Maven->User Settings设置使用哪个Maven配置文件和本地库路径
![11165431_bWA7.png](http://static.oschina.net/uploads/img/201412/11165431_bWA7.png)
m2e功能介绍
![11165432_uEGB.png](http://static.oschina.net/uploads/img/201412/11165432_uEGB.png)
![11165432_wAH9.png](http://static.oschina.net/uploads/img/201412/11165432_wAH9.png)
pom.xml介绍
上面介绍了约定大于配置、Maven项目目录结构、各种安装配置,下面还剩一个pom.xml,介绍一下。
前面介绍了
Maven项目对象模型,而pom.xml就是描述了这个模型
![](http://static.oschina.net/uploads/img/201412/11165433_dtp0.png)
书里提到的其他东西:
将项目eclipse话,主要是生成两个eclipse配置文件.project 和 .classpath
mvn eclipse:eclipse -DdownloadSources=true
生成项目的站点文档
mvn site
10.3 Maven插件的引入
mvn clean
使用maven-clean-plugin插件,将会清理之前对项目的各种操作,比如清理target目录。
10.3.1 Maven的Compiler插件
mvn compile
使用maven-compiler-plugin插件,编译代码。需要的配置如下:
<
build
>
<
plugins
>
<
plugin
>
<
groupId
>
org.apache.maven.plugins
</
groupId
>
<
artifactId
>
maven-compiler-plugin
</
artifactId
>
<
version
>
2.0
</
version
>
<
configuration
>
<
source
>
1.5
</
source
>
<
target
>
1.5
</
target
>
</
configuration
>
</
plugin
>
</
plugins
>
</
build
>
|
在上面的附件pom.xml中好像没有这段,其实它是继承了父pom的配置,所以自身就不需要配置了,除非它改变了设置。
10.3.2 Maven的Surefire插件
mvn clean test
使用maven-surefire-plugin插件,来执行单元测试。如果你只想执行某些测试,可以通过配置统配的形式来设置:
<
build
>
<
plugins
>
<
plugin
>
<
artifactId
>
maven-surefire-plugin
</
artifactId
>
<
version
>
2.5
</
version
>
<
configuration
>
<
includes
>
<
include
>
**/*Test*.java
</
include
>
</
includes
>
</
configuration
>
</
plugin
>
</
plugins
>
</
build
>
|
同compile的配置一样,上面的pom.xml继承了父pom的设置。
10.3.3 使用Maven生成HTML格式的JUnit报告
mvn surefire-report:report
使用maven-surefire-report-plugin插件,可以生成测试报告,配置如下:
<
build
>
<
plugins>
<
plugin
>
<
groupId
>
org.apache.maven.plugins
</
groupId
>
<
artifactId
>
maven-surefire-report-plugin
</
artifactId
>
<
version
>
2.5
</
version
>
</
plugin
>
</
plugins
>
</
build
>
|
10.4 Maven的不足
Maven的不足也就是Ant的长处,Ant只是一个构建工具,你可以按任意的方式去做,而用Maven就必须按照Maven的约定去做,优点也是缺点吧。
附件列表