Maven指令的生命周期
Maven 对项目构建过程分为三套相互独立的生命周期,分别是:
-
Clean Lifecycle:在进行真正的构建之前进行一些清理工作
-
Default Lifecycle:构建项目过程,是 Maven 最核心的
-
Site Lifecycle:生成项目报告,站点,发布站点
每一个大的生命周期又分为很多个阶段。后面的阶段依赖于前面的阶段,这点有点像 Ant 的构建依赖。每一个构建项目的命令都对应了 maven 底层一个插件。
生命周期本身相互独立,用户可以仅仅调用生命周期的某一个阶段,也就是说用户调用了 default 周期的任何阶段,并不会触发 clean 周期以及 site 周期的任何事情。
三大生命周期蕴含着小小的阶段,我们按顺序看一下:
clean 生命周期
pre-clean:执行一些清理前需要完成的工作
clean:清理上一次构建生成的文件
post-clean:执行一些清理后需要完成的工作
default 生命周期
validate:验证项目是否正确且所有必须信息是可用的
initialize:初始化配置
generate-sources:生成源代码编译目录
process-sources:处理项目主资源文件。一般来说,是对 src/main/resources 目录的内容进行变量替换等工作后,复制到项目输出的主 classpath 目录中
generate-resources:生成资源目录
process-resources:复制和处理资源文件到目标目录,为打包阶段做好准备
complie:编译项目的主源码。一般来说,是编译 src/main/java 目录下的 Java 文件至项目输出的主 classpath 目录中
process-classes:处理编译后文件
generate-test-sources:生成测试目录
process-test-sources:处理项目测试资源文件。一般来说,是对 src/test/resources 目录的内容进行变量替换等工作后,复制到项目输出的测试 classpath 目录中
generate-test-resources:生成测试资源文件
process-test-resources:处理测试资源文件,复制和处理测试资源到目标文件
test-compile:编译项目的测试代码。一般来说,是编译 src/test/java 目录下的 Java 文件至项目输出的测试 classpath 目录中
process-test-classes:处理测试源码编译生成的文件
test:使用单元测试框架(JUnit)运行测试代码,测试代码不会被打包或部署
prepare-package:打包前的准备
package:将编译好的代码打包成为 jar 或者 war 等
pre-integration-test:集成测试前准备
integration-test:集成测试
post-integration-test:为集成测试收尾
verify:验证,对集成测试的结果进行检查,保证质量达标
install:安装打包的项目到 Maven 本地仓库,供本地其他项目使用
deploy:将最终的工程包部署到远程 Maven 仓库,供其他开发人员和 Maven 项目使用
site 生命周期
pre-site:执行一些在生成项目站点之前需要完成的工作
site:生成项目站点及文档
post-site:执行一些在生成项目站点之后需要完成的工作,并且为部署做准备
site-deploy:将生成的项目站点发布到服务器上
命令行与生命周期
$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 生命周期的从 validate 至 install 的所有阶段。结合了两个生命周期,在执行真正的项目构建之前清理项目是一个很好的实践
$mvn clean deploy site-deploy :该命令调用 clean 生命周期的 clean 阶段、default 生命周期的 deploy 阶段,以及 site 生命周期的 site-deploy 阶段。实际执行的阶段为 clean 生命周期的 pre-clean、clean 阶段,default 生命周期的所有阶段,以及 site 生命周期的所有阶段。该命令结合了 Maven 所有的三个生命周期,且 deploy 为 default 生命周期的最后一个阶段,site-deploy 为 site 生命周期的最后一个阶段。
由于 Maven 中主要的生命周期阶段并不多,而常用的 Maven 命令实际都是基于这些阶段简单组合而成。