概述
Maven出现以前,项目构建的生命周期就已经存在了。软件开发人员每天都在对项目进行清理、编译、测试及部署,而且往往使用不同的方式做类似的工作。Maven生命周期对所有的构建过程进行抽象和统一,总结了一套高度完善、易扩展的生命周期。包含了项目的清理、初始化、编译、测试、打包、集成测试、验证、部署、站点生成等几乎所有的构建步骤。
敲黑板,划重点啦!
Maven生命周期是抽象的,本身不做任何实际工作,实际任务都交由插件完成。这种思想类似于设计模式中的模版方法模式(在父类中定义算法的整体结构,子类可以通过实现或者重写父类的方法来控制实际的行为)。
1.三套生命周期
Maven拥有三套相互独立的生命周期,分别是clean(清理项目),default(构建项目)和site(建立项目站点)。仅调用某套生命周期的某阶段不会对其他生命周期产生影响。每个生命周期都包含多个有序的阶段(phase),并且后面的阶段依赖于前面的阶段。Maven生命周期文档链接
Clean Lifecycle,目的是清理项目,包含三个阶段:
pre-clean 执行清理前需要完成的工作
clean 清理上一次构建生成的所有文件
post-clean 完成清理后需要完成的工作Default Lifecycle,目的是构建项目,生命周期中最核心的部分:
validate 验证项目是否正确及是否提供必要信息。
initialize 初始化构建状态,例如设置属性或创建目录。
generate-sources 生成所有包含在编译中的源代码。
Δ process-sources 处理项目主资源文件。对src/main/resources目录的内容进行变量替换等工作后,复制到项目输出的主classpath目录中。
generate-resources 生成包含在包中的资源
process-resources 将资源复制并处理到目标目录中,为打包做准备。
Δ compile 编译项目的主源码。编译src/main/resources目录下的java文件至项目输出的主classpath目录中。
process-classes 处理编译后的class文件。
generate-test-sources 生成所有包含在编译中的测试代码。
Δ process-test-sources 处理项目测试源文件。对src/test/resources目录的内容进行变量替换等工作后,复制到项目输出的测试classpath目录中。
generate-test-resources 创建测试资源。
process-test-resources 将资源复制并处理到目标目录中。
Δ test-compile 编译项目的测试代码。编译src/test/resources目录下的java文件至项目输出的测试classpath目录中。
process-test-classes 处理测试代码编译后的class文件。
Δ test 使用单元测试框架运行测试。测试代码不会被打包或部署。
prepare-package 打包前要做的准备工作。比如,解压缩,处理版本。
Δ package 接受编译好的代码,打包成可发布的格式。
pre-integration-test 在集成测试执行之前所需的操作。比如,设置环境等。
integration-test 如果需要,可将程序包处理并部署到可运行集成测试的环境中。
post-integration-test 完成集成测试后所需的操作。比如,清理环境等。
verify 运行所有检查来验证包是否有效及是否符合质量标准。
Δ install 将包安装到Maven本地仓库,供本地其他Maven项目使用
Δ deploy 将最终的包复制到远程仓库,供其他开发人员和Maven项目使用。Site Lifecycle 目的是建立和发布项目站点,Maven可以基于POM包含的信息,自动生成一个站点,方便团队交流和发布项目信息。该生命周期包含以下阶段:
pre-site 执行一些在生成项目站点之前需要完成的工作
site 生成项目站点文档
post-site 完成生成项目站点后需要完成的工作
site-deploy 将生成的项目站点发布到服务器上。
2.命令行
mvn clean
调用clean生命周期的clean阶段。实际执行的阶段为clean生命周期的pre-clean和clean阶段。
mvn test
调用default生命周期的test阶段。实际执行的阶段为default生命周期的validate、initialize等, test及其之前的所有阶段。
mvn clean install
调用clean生命周期的clean阶段和default生命周期的install阶段。实际执行的阶段为clean生命周期的pre-clean和clean阶段,default生命周期的install及其之前的所有阶段。
mvn clean deploy site-deploy
调用clean生命周期的clean阶段和default生命周期的install阶段。实际执行的阶段为clean生命周期的pre-clean和clean阶段,default生命周期的所有阶段,site生命周期的所有阶段。
所有的Maven生命周期定义 我们可以去查看$M2_HOME$\lib\maven-core-3.3.9\META-INF\plexus\下的componenets.xml,例如Default生命周期阶段定义:
<component>
<role>org.apache.maven.lifecycle.Lifecycle</role>
<implementation>org.apache.maven.lifecycle.Lifecycle</implementation>
<role-hint>default</role-hint>
<configuration>
<id>default</id>
<phases>
<phase>validate</phase>
<phase>initialize</phase>
<phase>generate-sources</phase>
<phase>process-sources</phase>
<phase>generate-resources</phase>
<phase>process-resources</phase>
<phase>compile</phase>
<phase>process-classes</phase>
<phase>generate-test-sources</phase>
<phase>process-test-sources</phase>
<phase>generate-test-resources</phase>
<phase>process-test-resources</phase>
<phase>test-compile</phase>
<phase>process-test-classes</phase>
<phase>test</phase>
<phase>prepare-package</phase>
<phase>package</phase>
<phase>pre-integration-test</phase>
<phase>integration-test</phase>
<phase>post-integration-test</phase>
<phase>verify</phase>
<phase>install</phase>
<phase>deploy</phase>
</phases>
</configuration>
</component>
接下来进入Maven插件的学习。
——《Maven实战》学习笔记