Maven 构建生命周期
构建生命周期是什么?
构建生命周期阶段的目标是执行顺序是一个良好定义的序列。
这里使用一个例子,一个典型的 Maven 构建生命周期是由下列顺序的阶段:
阶段 | 处理 | 描述 |
---|---|---|
准备资源 | 资源复制 | 资源复制可以进行定制 |
编译 | 执行编译 | 源代码编译在此阶段完成 |
包装 | 打包 | 创建JAR/WAR包如在 pom.xml 中定义提及的包 |
安装 | 安装 | 这一阶段在本地/远程Maven仓库安装程序包 |
可用于注册必须执行一个特定的阶段之前或之后的目标,有之前处理和之后阶段。
当 Maven 开始建立一个项目,它通过定义序列阶段步骤和执行注册的每个阶段的目标。 Maven有以下三种标准的生命周期:
- clean
- default(或 build)
- site
目标代表一个特定的任务,它有助于项目的建设和管理。可以被绑定到零个或多个生成阶段。一个没有绑定到任何构建阶段的目标,它的构建生命周期可以直接调用执行。
执行的顺序取决于目标和构建阶段折调用顺序。例如,考虑下面的命令。清理和打包(mvn clean)参数的构建阶段,而 dependency:copy-dependencies package 是一个目标。
mvn clean dependency:copy-dependencies package
在这里,清洁的阶段,将首先执行,然后是依赖关系:复制依赖性的目标将被执行,并终于将执行包阶段。
清洁生命周期
当我们执行命令 mvn clean 命令后,Maven 调用清洁的生命周期由以下几个阶段组成:
- pre-clean
- clean
- post-clean
Maven 清洁目标(clean:clean)被绑定清洁干净的生命周期阶段。clean:clean 目标删除 build 目录下的构建输出。因此,当 mvn clean 命令执行时,Maven会删除编译目录。
目标清洁生命周期在上述阶段,我们可以自定义此行为。
在下面的示例中,我们将附加 maven-antrun-plugin:run 对目标进行预清洁,清洁和清洁后这三个阶段。这将使我们能够调用的信息显示清理生命周期的各个阶段。
现在来创建了一个 pom.xml 文件在 *C:\MVN* 项目文件夹中,具体内容如下:
4.0.0
com.companyname.projectgroup
project
1.0
org.apache.maven.plugins
maven-antrun-plugin
1.1
id.pre-clean
pre-clean
run
pre-clean phase
id.clean
clean
run
clean phase
id.post-clean
post-clean
run
post-clean phase
现在,打开命令控制台,到该文件夹包含 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 清洁命令,该命令将显示清洁前什么都不会被执行。
默认(或生成)生命周期
这是 Maven 主要的生命周期,用于构建应用程序。它有以下 23 个阶段。
生命周期阶段 | 描述 |
---|---|
validate | 验证项目是否正确,并且所有必要的信息可用于完成构建过程 |
initialize | 建立初始化状态,例如设置属性 |
generate-sources | 产生任何的源代码包含在编译阶段 |
process-sources | 处理源代码,例如,过滤器值 |
generate-resources | 包含在包中产生的资源 |
process-resources | 复制和处理资源到目标目录,准备打包阶段 |
compile | 编译该项目的源代码 |
process-classes | 从编译生成的文件提交处理,例如:Java类的字节码增强/优化 |
generate-test-sources | 生成任何测试的源代码包含在编译阶段 |
process-test-sources | 处理测试源代码,例如,过滤器任何值 |
test-compile | 编译测试源代码到测试目标目录 |
process-test-classes | 处理测试代码文件编译生成的文件 |
test | 运行测试使用合适的单元测试框架(JUnit) |
prepare-package | 执行必要的任何操作的实际打包之前准备一个包 |
package | 提取编译后的代码,并在其分发格式打包,如JAR,WAR或EAR文件 |
pre-integration-test | 完成执行集成测试之前所需操作。例如,设置所需的环境 |
integration-test | 处理并在必要时部署软件包到集成测试可以运行的环境 |
pre-integration-test | 完成集成测试已全部执行后所需操作。例如,清理环境 |
verify | 运行任何检查,验证包是有效的,符合质量审核规定 |
install | 将包安装到本地存储库,它可以用作当地其他项目的依赖 |
deploy | 复制最终的包到远程仓库与其他开发者和项目共享 |
有涉及到Maven 生命周期值得一提几个重要概念:
- 当一个阶段是通过 Maven命令调用,例如:mvn compile,只有阶段到达并包括这个阶段才会被执行。
- 不同的 Maven 目标绑定到 Maven生命周期的不同阶段这是这取决于包类型(JAR/WAR/EAR)。
在下面的示例中,将附加 Maven 的 antrun 插件:运行目标构建生命周期的几个阶段。这将使我们能够回显的信息显示生命周期的各个阶段。
我们已经更新了在 C:\MVN\ 项目文件夹中的 pom.xml 文件。
4.0.0
com.companyname.projectgroup
project
1.0
org.apache.maven.plugins
maven-antrun-plugin
1.1
id.validate
validate
run
validate phase
id.compile
compile
run
compile phase
id.test
test
run
test phase
id.package
package
run
package phase
id.deploy
deploy
run
deploy phase
现在,打开命令控制台,进入包含 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] ------------------------------------------------------------------
网站的生命周期
Maven的网站插件通常用于创建新的文档,创建报告,部署网站等。
阶段
- pre-site
- site
- post-site
- site-deploy
在下面的示例中,我们将附加 maven-antrun-plugin:run 目标网站的生命周期的所有阶段。这将使我们能够调用短信显示的生命周期的各个阶段。
现在更新 pom.xml 文件在 C:\MVN\ 项目文件夹中。
4.0.0
com.companyname.projectgroup
project
1.0
org.apache.maven.plugins
maven-antrun-plugin
1.1
id.pre-site
pre-site
run
pre-site phase
id.site
site
run
site phase
id.post-site
post-site
run
post-site phase
id.site-deploy
site-deploy
run
site-deploy phase
打开命令控制台,进入该文件夹包含 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] -