java项目构建工具Maven (六)

2014-11-24 10:58:07 · 作者: · 浏览: 6
--------------------------
[INFO] For more information, run Maven with the -e switch


不幸的是构建失败了,不过我们先耐心分析一下这段输出(为了本书的简洁,一些不重要的信息我用省略号略去了)。
命令行输入的是mvn clean test,而Maven实际执行的可不止这两个任务,
还有clean:clean、resources:resources、compiler:compile、resources:testResources以及compiler:testCompile。
暂时我们需要了解的是,在Maven执行测试(test)之前,
它会先自动执行项目主资源处理,主代码编译,测试资源处理,测试代码编译等工作,
这是Maven生命周期的一个特性,本书后续章节会详细解释Maven的生命周期。
从输出中我们还看到:Maven从中央仓库下载了junit-4.7.pom和junit-4.7.jar
这两个文件到本地仓库(~/.m2/repository)中,供所有Maven项目使用。
构建在执行compiler:testCompile任务的时候失败了,Maven输出提示我们需要使用-source 5或更高版本以启动注释,
也就是前面提到的JUnit 4的@Test注解。这是Maven初学者常常会遇到的一个问题。
由于历史原因,Maven的核心插件之一compiler插件默认只支持编译Java 1.3,
因此我们需要配置该插件使其支持Java 5,见代码清单3-5:
代码清单3-5:配置maven-compiler-plugin支持Java 5
Java代码





org.apache.maven.plugins
maven-compiler-plugin

1.5
1.5





该POM省略了除插件配置以外的其他部分,我们暂且不去关心插件配置的细节,只需要知道compiler插件支持Java 5的编译。
现在再执行mvn clean test,输出如下:
Java代码

[INFO] [compiler:testCompile {execution: default-testCompile}]
[INFO] Compiling 1 source file to D: \code\hello-world\target\test-classes
[INFO] [surefire:test {execution: default-test}]
[INFO] Surefire report directory: D:\code\hello-world\target\surefire-reports
-------------------------------------------------------
T E S T S
-------------------------------------------------------
Running com.juvenxu.mvnbook.helloworld.HelloWorldTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.055 sec
Results :
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------

我们看到compiler:testCompile任务执行成功了,测试代码通过编译之后在target/test-classes下生成了二进制文件,
紧接着surefire:test任务运行测试,surefire是Maven世界中负责执行测试的插件,
这里它运行测试用例HelloWorldTest,并且输出测试报告。显然,我们的测试通过了——BUILD SUCCESSFUL。
---------------------------------------
3.4 打包和运行

将项目进行编译、测试之后,下一个重要步骤就是打包(package)。
Hello World的POM中没有指定打包类型,使用默认打包类型jar,
我们可以简单地执行命令 mvn clean package 进行打包,
可以看到如下输出:
Java代码
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
[INFO] [jar:jar {execution: default-jar}]
[INFO] Building jar: D:\code\hello-world\target\hello-world-1.0-SNAPSHOT.jar
[INFO]
--------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL

类似地,Maven会在打包之前执行编译、测试等操作。
这里我们看到jar:jar任务负责打包,实际上就是jar插件的jar目标将项目主代码打包成一个名为hello-world-1.0-SNAPSHOT.jar的文件,
该文件也位于target/输出目录中,它是根据artifact-version.jar规则进行命名的,
如有需要,我们还可以使用finalName来自定义该文件的名称,这里暂且不展开,本书后面会详细解释。
至此,我们得到了项目的输出,如果有需要的话,就可以复制这个jar文件到其他项目的Classpath中从而使用HelloWorld类。
但是,如何才能让其他的Maven项目直接引用这个jar呢?
我们还需要一个安装的步骤,执行 mvn clean install:
Java代码

[INFO] [jar:jar {execution: default-jar}]
[INFO] Building jar: D: \code\hello-world\target\hello-world-1.0-SNAPSHOT.jar
[INFO] [install:install {execution: default-install}]
[INFO] Installing D:\code\hello-world\target\hello-world-1.0-SNAPSHOT.jar to
C:\Users\juven\.m2\repository\com\juvenxu\mvnbook\hello-world\1.0-SNAPSHOT\hello-world-1.0-SNAPSHOT.jar
[INFO]
------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL

在打包之后,我们又执行了安装任务install:install,
从输出我们看到该任务将项目输出的jar安装到了Maven本地仓库中,
我们可以打开相应的文件夹看到Hello Wo