maven打印的命令:
mvn -Dtest -DfailIfNoTests=false -e package
我們用maven打war包的時候,打包階段將會創建一個war文件。但是,在它之前的目標做什麼呢,像compiler:compile
和surefire:test
?在Maven經過它生命週期中package
之前的階段的時候,這些目標被運行了;Maven執行一個階段的時候,它首先會有序的執行前面的所有階段,到命令行指定的那個階段爲止。每個階段對應了零個或者多個目標。我們沒有進行任何插件配置或者定製,所以這個例子綁定了一組標準插件的目標到默認的生命週期。當Maven經過以package
爲結尾的默認生命週期的時候,下面的目標按順序被執行:
-
resources:resources
-
Resources插件的
resources
目標綁定到了resources
階段。這個目標複製src/main/resources
下的所有資源和其它任何配置的資源目錄,到輸出目錄。 -
compiler:compile
-
Compiler插件的
compile
目標綁定到了compile
階段。這個目標編譯src/main/java
下的所有源代碼和其他任何配置的資源目錄,到輸出目錄。 -
resources:testResources
-
Resources插件的
testResources
目標綁定到了test-resources
階段。這個目標複製src/test/resources
下的所有資源和其它任何的配置的測試資源目錄,到測試輸出目錄。 -
compiler:testCompile
-
Compiler插件的
testCompile
目標綁定到了test-compile
階段。這個目標編譯src/test/java
下的測試用例和其它任何的配置的測試資源目錄,到測試輸出目錄。 -
surefire:test
-
Surefire插件的
test
目標綁定到了test
階段。這個目標運行所有的測試並且創建那些捕捉詳細測試結果的輸出文件。默認情況下,如果有測試失敗,這個目標會終止。 -
jar:jar
-
Jar插件的
jar
目標綁定到了package
階段。這個目標把輸出目錄打包成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>