当Maven开始构建项目时,它将逐步按照定义的阶段顺序执行目标,并在每个阶段中进行记录。
Maven具有以下三个标准生命周期-
- clean
- default(或 build)
- site
执行的顺序取决于调用目标和构建阶段的顺序。例如,考虑以下命令。 clean 和 package 参数是构建阶段,而 dependency:copy-dependencies 是部署目标。
mvn clean dependency:copy-dependencies package
在这里,首先执行 clean 阶段,然后执行 dependency:copy-dependencies目标,最后执行 package 阶段。
Clean生命周期
当无涯教程执行 mvn post-clean 命令时,Maven会调用清理生命周期,该阶段包括以下阶段。
- pre-clean
- clean
- post-clean
Maven的清理目标(clean:clean)绑定到clean生命周期中的 clean 阶段。它的 clean:cleangoal 通过删除构建目录来删除构建的输出。因此,当执行 mvn clean 命令时,Maven会删除构建目录。
在以下示例中将maven-antrun-plugin:run目标附加到预清理,清理和后清理阶段。在C:\MAVEN\project文件夹中创建了pom.xml。
<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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.companyname.projectgroup</groupId>
<artifactId>project</artifactId>
<version>1.0</version>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.1</version>
<executions>
<execution>
<id>id.pre-clean</id>
<phase>pre-clean</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<echo>pre-clean phase</echo>
</tasks>
</configuration>
</execution>
</span><span class="tag"><execution></span><span class="pln">
</span><span class="tag"><id></span><span class="pln">id.clean</span><span class="tag"></id></span><span class="pln">
</span><span class="tag"><phase></span><span class="pln">clean</span><span class="tag"></phase></span><span class="pln">
</span><span class="tag"><goals></span><span class="pln">
</span><span class="tag"><goal></span><span class="pln">run</span><span class="tag"></goal></span><span class="pln">
</span><span class="tag"></goals></span><span class="pln">
</span><span class="tag"><configuration></span><span class="pln">
</span><span class="tag"><tasks></span><span class="pln">
</span><span class="tag"><echo></span><span class="pln">clean phase</span><span class="tag"></echo></span><span class="pln">
</span><span class="tag"></tasks></span><span class="pln">
</span><span class="tag"></configuration></span><span class="pln">
</span><span class="tag"></execution></span><span class="pln">
</span><span class="tag"><execution></span><span class="pln">
</span><span class="tag"><id></span><span class="pln">id.post-clean</span><span class="tag"></id></span><span class="pln">
</span><span class="tag"><phase></span><span class="pln">post-clean</span><span class="tag"></phase></span><span class="pln">
</span><span class="tag"><goals></span><span class="pln">
</span><span class="tag"><goal></span><span class="pln">run</span><span class="tag"></goal></span><span class="pln">
</span><span class="tag"></goals></span><span class="pln">
</span><span class="tag"><configuration></span><span class="pln">
</span><span class="tag"><tasks></span><span class="pln">
</span><span class="tag"><echo></span><span class="pln">post-clean phase</span><span class="tag"></echo></span><span class="pln">
</span><span class="tag"></tasks></span><span class="pln">
</span><span class="tag"></configuration></span><span class="pln">
</span><span class="tag"></execution></span><span class="pln">
</span><span class="tag"></executions></span><span class="pln">
</span><span class="tag"></plugin></span><span class="pln">
</span><span class="tag"></plugins></span><span class="pln">
</build>
</project>
现在打开命令控制台,转到包含pom.xml的文件夹并执行以下 mvn 命令。
C:\MVN\project>mvn post-clean
Maven将开始处理并显示执行生命周期的所有阶段。
[INFO] Scanning for projects... [INFO] ----------------------------------------------------------------- - [INFO] Building Unnamed - com.companyname.projectgroup:project:jar:1.0 [INFO] task-segment: [post-clean] [INFO] ------------------------------------------------------------------ [INFO] [antrun:run {execution: id.pre-clean}] [INFO] Executing tasks [echo] pre-clean phase [INFO] Executed tasks [INFO] [clean:clean {execution: default-clean}] [INFO] [antrun:run {execution: id.clean}] [INFO] Executing tasks [echo] clean phase [INFO] Executed tasks [INFO] [antrun:run {execution: id.post-clean}] [INFO] Executing tasks [echo] post-clean phase [INFO] Executed tasks [INFO] ------------------------------------------------------------------ [INFO] BUILD SUCCESSFUL [INFO] ------------------------------------------------------------------ [INFO] Total time: > 1 second [INFO] Finished at: Sat Jul 07 13:38:59 IST 2012 [INFO] Final Memory: 4M/44M [INFO] ------------------------------------------------------------------
您可以尝试调整 mvn clean 命令,该命令将显示 pre-clean 和clean。 后期清理阶段将不会执行任何操作。
Default (Build)生命周期
这是Maven的主要生命周期,用于构建应用程序。它分为以下21个阶段。
| Sr.No. | Lifecycle Phase & Remark |
|---|---|
| 1 |
validate 验证项目是否正确以及所有必要的信息是否可用以完成构建过程。 |
| 2 |
initialize 初始化构建状态。 |
| 3 |
generate-sources 生成任何要包含在编译阶段的源代码。 |
| 4 |
process-sources 处理源代码,例如,过滤任何值。 |
| 5 |
generate-resources 生成要包含在包中的资源。 |
| 6 |
process-resources 将资源复制并处理到目标目录中,以准备打包阶段。 |
| 7 |
compile 编译项目的源代码。 |
| 8 |
process-classes 对编译后生成的文件进行后处理,例如对Java类进行字节码增强/优化。 |
| 9 |
generate-test-sources 生成任何要包含在编译阶段的测试源代码。 |
| 10 |
process-test-sources 处理测试源代码,例如,过滤所有值。 |
| 11 |
test-compile 将测试源代码编译到测试目标目录中。 |
| 12 |
process-test-classes 处理从测试代码文件编译生成的文件。 |
| 13 |
test 使用合适的单元测试框架(Junit是其中之一)运行测试。 |
| 14 |
prepare-package 在实际包装之前,请执行准备包装所需的任何操作。 |
| 15 |
package 取得编译后的代码并将其打包为可分发的格式,例如JAR,WAR或EAR文件。 |
| 16 |
pre-integration-test 在执行集成测试之前执行所需的操作。例如,设置所需的环境。 |
| 17 |
integration-test 如有必要,将程序包处理并部署到可以运行集成测试的环境中。 |
| 18 |
post-integration-test 执行集成测试后,执行所需的操作。例如,清理环境。 |
| 19 |
verify 运行任何检查,以验证该软件包有效并符合质量标准。 |
| 20 |
install 将程序包安装到本地存储库中,该存储库可用作本地其他项目中的依赖项。 |
| 21 |
deploy 将最终软件包复制到远程存储库,以便与其他开发人员和项目共享。 |
在以下示例中,无涯教程将把maven-antrun-plugin:run目标附加到Build生命周期的几个阶段。这将能够回显显示生命周期各个阶段的文本消息。
已经更新了C:\MAVEN\project文件夹中的pom.xml。
<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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.companyname.projectgroup</groupId>
<artifactId>project</artifactId>
<version>1.0</version>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.1</version>
<executions>
<execution>
<id>id.validate</id>
<phase>validate</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<echo>validate phase</echo>
</tasks>
</configuration>
</execution>
</span><span class="tag"><execution></span><span class="pln">
</span><span class="tag"><id></span><span class="pln">id.compile</span><span class="tag"></id></span><span class="pln">
</span><span class="tag"><phase></span><span class="pln">compile</span><span class="tag"></phase></span><span class="pln">
</span><span class="tag"><goals></span><span class="pln">
</span><span class="tag"><goal></span><span class="pln">run</span><span class="tag"></goal></span><span class="pln">
</span><span class="tag"></goals></span><span class="pln">
</span><span class="tag"><configuration></span><span class="pln">
</span><span class="tag"><tasks></span><span class="pln">
</span><span class="tag"><echo></span><span class="pln">compile phase</span><span class="tag"></echo></span><span class="pln">
</span><span class="tag"></tasks></span><span class="pln">
</span><span class="tag"></configuration></span><span class="pln">
</span><span class="tag"></execution></span><span class="pln">
</span><span class="tag"><execution></span><span class="pln">
</span><span class="tag"><id></span><span class="pln">id.test</span><span class="tag"></id></span><span class="pln">
</span><span class="tag"><phase></span><span class="pln">test</span><span class="tag"></phase></span><span class="pln">
</span><span class="tag"><goals></span><span class="pln">
</span><span class="tag"><goal></span><span class="pln">run</span><span class="tag"></goal></span><span class="pln">
</span><span class="tag"></goals></span><span class="pln">
</span><span class="tag"><configuration></span><span class="pln">
</span><span class="tag"><tasks></span><span class="pln">
</span><span class="tag"><echo></span><span class="pln">test phase</span><span class="tag"></echo></span><span class="pln">
</span><span class="tag"></tasks></span><span class="pln">
</span><span class="tag"></configuration></span><span class="pln">
</span><span class="tag"></execution></span><span class="pln">
</span><span class="tag"><execution></span><span class="pln">
</span><span class="tag"><id></span><span class="pln">id.package</span><span class="tag"></id></span><span class="pln">
</span><span class="tag"><phase></span><span class="pln">package</span><span class="tag"></phase></span><span class="pln">
</span><span class="tag"><goals></span><span class="pln">
</span><span class="tag"><goal></span><span class="pln">run</span><span class="tag"></goal></span><span class="pln">
</span><span class="tag"></goals></span><span class="pln">
</span><span class="tag"><configuration></span><span class="pln">
</span><span class="tag"><tasks></span><span class="pln">
</span><span class="tag"><echo></span><span class="pln">package phase</span><span class="tag"></echo></span><span class="pln">
</span><span class="tag"></tasks></span><span class="pln">
</span><span class="tag"></configuration></span><span class="pln">
</span><span class="tag"></execution></span><span class="pln">
</span><span class="tag"><execution></span><span class="pln">
</span><span class="tag"><id></span><span class="pln">id.deploy</span><span class="tag"></id></span><span class="pln">
</span><span class="tag"><phase></span><span class="pln">deploy</span><span class="tag"></phase></span><span class="pln">
</span><span class="tag"><goals></span><span class="pln">
</span><span class="tag"><goal></span><span class="pln">run</span><span class="tag"></goal></span><span class="pln">
</span><span class="tag"></goals></span><span class="pln">
</span><span class="tag"><configuration></span><span class="pln">
</span><span class="tag"><tasks></span><span class="pln">
</span><span class="tag"><echo></span><span class="pln">deploy phase</span><span class="tag"></echo></span><span class="pln">
</span><span class="tag"></tasks></span><span class="pln">
</span><span class="tag"></configuration></span><span class="pln">
</span><span class="tag"></execution></span><span class="pln">
</span><span class="tag"></executions></span><span class="pln">
</span><span class="tag"></plugin></span><span class="pln">
</span><span class="tag"></plugins></span><span class="pln">
</build>
</project>
现在打开命令控制台,转到包含pom.xml的文件夹,然后执行以下 mvn 命令。
C:\MVN\project>mvn compile
Maven将开始处理并显示构建生命周期的各个阶段,直至编译阶段。
[INFO] Scanning for projects... [INFO] ----------------------------------------------------------------- - [INFO] Building Unnamed - com.companyname.projectgroup:project:jar:1.0 [INFO] task-segment: [compile] [INFO] ----------------------------------------------------------------- - [INFO] [antrun:run {execution: id.validate}] [INFO] Executing tasks [echo] validate phase [INFO] Executed tasks [INFO] [resources:resources {execution: default-resources}] [WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources, i.e. build is platform dependent! [INFO] skip non existing resourceDirectory C:\MVN\project\src\main\resources [INFO] [compiler:compile {execution: default-compile}] [INFO] Nothing to compile - all classes are up to date [INFO] [antrun:run {execution: id.compile}] [INFO] Executing tasks [echo] compile phase [INFO] Executed tasks [INFO] ----------------------------------------------------------------- - [INFO] BUILD SUCCESSFUL [INFO] ----------------------------------------------------------------- - [INFO] Total time: 2 seconds [INFO] Finished at: Sat Jul 07 20:18:25 IST 2012 [INFO] Final Memory: 7M/64M [INFO] ----------------------------------------------------------------- -
Site生命周期
Maven Site 插件通常用于创建新文档报告,部署网站等。它具有以下阶段-
- pre-site
- site
- post-site
- site-deploy
在以下示例中,无涯教程将 maven-antrun-plugin:run 目标附加到站点生命周期的所有阶段。这将能够回显显示生命周期各个阶段的文本消息。
已经更新了C:\MAVEN\project文件夹中的pom.xml。
<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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.companyname.projectgroup</groupId>
<artifactId>project</artifactId>
<version>1.0</version>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.1</version>
<executions>
<execution>
<id>id.pre-site</id>
<phase>pre-site</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<echo>pre-site phase</echo>
</tasks>
</configuration>
</execution>
</span><span class="tag"><execution></span><span class="pln">
</span><span class="tag"><id></span><span class="pln">id.site</span><span class="tag"></id></span><span class="pln">
</span><span class="tag"><phase></span><span class="pln">site</span><span class="tag"></phase></span><span class="pln">
</span><span class="tag"><goals></span><span class="pln">
</span><span class="tag"><goal></span><span class="pln">run</span><span class="tag"></goal></span><span class="pln">
</span><span class="tag"></goals></span><span class="pln">
</span><span class="tag"><configuration></span><span class="pln">
</span><span class="tag"><tasks></span><span class="pln">
</span><span class="tag"><echo></span><span class="pln">site phase</span><span class="tag"></echo></span><span class="pln">
</span><span class="tag"></tasks></span><span class="pln">
</span><span class="tag"></configuration></span><span class="pln">
</span><span class="tag"></execution></span><span class="pln">
</span><span class="tag"><execution></span><span class="pln">
</span><span class="tag"><id></span><span class="pln">id.post-site</span><span class="tag"></id></span><span class="pln">
</span><span class="tag"><phase></span><span class="pln">post-site</span><span class="tag"></phase></span><span class="pln">
</span><span class="tag"><goals></span><span class="pln">
</span><span class="tag"><goal></span><span class="pln">run</span><span class="tag"></goal></span><span class="pln">
</span><span class="tag"></goals></span><span class="pln">
</span><span class="tag"><configuration></span><span class="pln">
</span><span class="tag"><tasks></span><span class="pln">
</span><span class="tag"><echo></span><span class="pln">post-site phase</span><span class="tag"></echo></span><span class="pln">
</span><span class="tag"></tasks></span><span class="pln">
</span><span class="tag"></configuration></span><span class="pln">
</span><span class="tag"></execution></span><span class="pln">
</span><span class="tag"><execution></span><span class="pln">
</span><span class="tag"><id></span><span class="pln">id.site-deploy</span><span class="tag"></id></span><span class="pln">
</span><span class="tag"><phase></span><span class="pln">site-deploy</span><span class="tag"></phase></span><span class="pln">
</span><span class="tag"><goals></span><span class="pln">
</span><span class="tag"><goal></span><span class="pln">run</span><span class="tag"></goal></span><span class="pln">
</span><span class="tag"></goals></span><span class="pln">
</span><span class="tag"><configuration></span><span class="pln">
</span><span class="tag"><tasks></span><span class="pln">
</span><span class="tag"><echo></span><span class="pln">site-deploy phase</span><span class="tag"></echo></span><span class="pln">
</span><span class="tag"></tasks></span><span class="pln">
</span><span class="tag"></configuration></span><span class="pln">
</span><span class="tag"></execution></span><span class="pln">
</span><span class="tag"></executions></span><span class="pln">
</span><span class="tag"></plugin></span><span class="pln">
</span><span class="tag"></plugins></span><span class="pln">
</build>
</project>
现在打开命令控制台,转到包含pom.xml的文件夹,然后执行以下 mvn 命令。
C:\MVN\project>mvn site
Maven将开始处理并显示站点生命周期的各个阶段,直至站点阶段。
[INFO] Scanning for projects... [INFO] ------------------------------------------------------------------ [INFO] Building Unnamed - com.companyname.projectgroup:project:jar:1.0 [INFO] task-segment: [site] [INFO] ------------------------------------------------------------------ [INFO] [antrun:run {execution: id.pre-site}] [INFO] Executing tasks [echo] pre-site phase [INFO] Executed tasks [INFO] [site:site {execution: default-site}][INFO] Generating "About" report. [INFO] Generating "Issue Tracking" report. [INFO] Generating "Project Team" report. [INFO] Generating "Dependencies" report. [INFO] Generating "Project Plugins" report. [INFO] Generating "Continuous Integration" report. [INFO] Generating "Source Repository" report. [INFO] Generating "Project License" report. [INFO] Generating "Mailing Lists" report. [INFO] Generating "Plugin Management" report. [INFO] Generating "Project Summary" report.
[INFO] [antrun:run {execution: id.site}] [INFO] Executing tasks [echo] site phase [INFO] Executed tasks [INFO] ------------------------------------------------------------------ [INFO] BUILD SUCCESSFUL [INFO] ------------------------------------------------------------------ [INFO] Total time: 3 seconds [INFO] Finished at: Sat Jul 07 15:25:10 IST 2012 [INFO] Final Memory: 24M/149M [INFO] ------------------------------------------------------------------