maven打印的命令:
mvn -Dtest -DfailIfNoTests=false -e package
我们用maven打war包的时候,打包阶段将会创建一个war文件。但是,在它之前的目标做什么呢,像compiler:compile
和surefire:test
?在Maven经过它生命周期中package
之前的阶段的时候,这些目标被运行了;Maven执行一个阶段的时候,它首先会有序的执行前面的所有阶段,到命令行指定的那个阶段为止。每个阶段对应了零个或者多个目标。我们没有进行任何插件配置或者定制,所以这个例子绑定了一组标准插件的目标到默认的生命周期。当Maven经过以package
为结尾的默认生命周期的时候,下面的目标按顺序被执行:
-
Resources插件的
resources
目标绑定到了resources
阶段。这个目标复制src/main/resources
下的所有资源和其它任何配置的资源目录,到输出目录。 -
Compiler插件的
compile
目标绑定到了compile
阶段。这个目标编译src/main/java
下的所有源代码和其他任何配置的资源目录,到输出目录。 -
Resources插件的
testResources
目标绑定到了test-resources
阶段。这个目标复制src/test/resources
下的所有资源和其它任何的配置的测试资源目录,到测试输出目录。 -
Compiler插件的
testCompile
目标绑定到了test-compile
阶段。这个目标编译src/test/java
下的测试用例和其它任何的配置的测试资源目录,到测试输出目录。 -
Surefire插件的
test
目标绑定到了test
阶段。这个目标运行所有的测试并且创建那些捕捉详细测试结果的输出文件。默认情况下,如果有测试失败,这个目标会终止。 -
Jar插件的
jar
目标绑定到了package
阶段。这个目标把输出目录打包成JAR文件。
resources:resources
compiler:compile
resources:testResources
compiler:testCompile
surefire:test
jar:jar
总结得来说,当我们运行mvn package,Maven运行到打包为止的所有阶段,在Maven沿着生命周期一步步向前的过程中,它运行绑定在每个阶段上的所有目标。你也可以像下面这样显式的指定一系列插件目标,以得到同样的结果:
mvn resources:resources \
compiler:compile \
resources:testResources \
compiler:testCompile \
surefire:test \
jar:jar
运行package
阶段能很好的跟踪一个特定的构建中包含的所有目标,它也允许每个项目使用Maven来遵循一组定义明确的标准。而这个生命周期能让开发人员从一个Maven项目跳到另外一个Maven项目,而不用知道太多每个项目构建的细节。如果你能够构建一个Maven项目,那么你就能构建所有的Maven项目。
一个常用的pom文件:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>boss</groupId>
<artifactId>boss</artifactId>
<packaging>war</packaging>
<version>0.1</version>
<description></description>
<repositories>
<repository>
<id>scmserver-releases</id>
<name>scmserver-releases</name>
<url>http://192.168.***.***:8080/artifactory/repo</url>
</repository>
</repositories>
<properties>
<java.version>1.6</java.version>
<junit.version>3.8.2</junit.version>
<log4j.version>1.2.14</log4j.version>
</properties>
<pluginRepositories>
<pluginRepository>
<id>scmserver-releases</id>
<name>scmserver-releases</name>
<url>http://192.168.***.***:8080/artifactory/repo</url>
</pluginRepository>
</pluginRepositories>
<!--这个地方比较重要,资源文件分布在不同的文件夹下面,非默认目录-->
<build>
<finalName>boss</finalName>
<sourceDirectory>src/main/java</sourceDirectory>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
<resource>
<directory>src/main/resources</directory>
</resource>
</resources>
<!-- 指定java源文件编译的版本以及编码格式 -->
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-config-browser-plugin</artifactId>
<version>${struts.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>${log4j.version}</version>
</dependency>
</dependencies>
</project>