maven生命周期

maven有一个十分完善的生命周期模型(lifecycle)。运行maven的每个步骤都由maven预定义的,相比Ant而言,这种预定义使maven的使用变得简单(Ant的每个步骤都要你手工去定义)。这个模型是一种标准,在不同的项目中,maven的生命周期是相同的。一般情况下,mvn clean package 这样的命令是通用的。

maven有三套相互独立的生命周期:

  1. Clean Lifecycle 在进行真正的构建之前进行一些清理工作。

  2. Default Lifecycle 构建的核心部分,编译,测试,打包,部署等等。

  3. Site Lifecycle 生成项目报告,站点,发布站点。

说它们是相互独立的,是指你可以只调用clean来清理项目,仅调用site来生成项目报告。你也可以直接运行 mvn clean install site 运行所有这三套生命周期。

每套生命周期都由一组阶段(Phase)组成,我们平时在命令行输入的命令总会对应于一个特定的阶段。比如,运行mvn clean ,这里的clean是Clean生命周期的一个阶段。运行某个阶段的时候,它之前的所有阶段都会被运行,

Clean 生命周期

Clean生命周期一共包含了三个阶段:

  • pre-clean 执行一些需要在clean之前完成的工作

  • clean 移除所有上一次构建生成的文件

  • post-clean 执行一些需要在clean之后立刻完成的工作

如上面所说,我们平常执行的mvn clean指令时,maven会先运行pre-clean,然后运行clean。如果执行 mvn post-clean,则执行顺序为pre-clean-->clean-->post-clean

Site 生命周期

  • pre-site 执行一些需要在生成站点文档之前完成的工作

  • site 生成项目的站点文档

  • post-site 执行一些需要在生成站点文档之后完成的工作,并且为部署做准备

  • site-deploy 将生成的站点文档部署到特定的服务器上

Default 生命周期

validate验证项目是否正确
initialize初始化构建状态,如设置属性或创建目录。
generate-sources生成所有包含代码
process-sources处理源代码,例如过滤值。
generate-resources生成资源
process-resources复制并处理资源文件,至目标目录,准备打包。
compile编译项目的源代码。
process-classes对编译生成的文件做后置处理,例如Java类字节码增强。
generate-test-sources生成所有测试所需的包含代码
process-test-sources处理测试源代码,例如过滤值。
generate-test-resources生成测试资源
process-test-resources复制并处理资源文件,至目标测试目录。
test-compile编译测试源代码。
process-test-classes对测试代码编译生成的文件做后置处理,例如Java类字节码增强,maven 2.0.5及以后的版本加入此阶段
test使用合适的单元测试框架运行测试。这些测试不能要求打包或部署。
prepare-package执行所有打包之前的必须打包准备工作,maven 2.1 及以后版本加入此阶段
package将编译的代码打包生成可发布的格式,如 JAR 。
pre-integration-test执行集成测试之前的工作,这涉及一些例如设置需要的环境的工作
integration-test如果必要,此阶段会把可发布的包部署到集成测试环境
post-integration-test集成测试兵团操作,例如清理环境
verify运行所有检查,验证包是否有效,并且符合软件质量标准
install将包安装至本地仓库,用于其它项目依赖。
deploy将最终的包复制到远程的仓库,以让其它开发人员与项目共享。

apache maven guides:Introduction to the Build Lifecycle