Maven 生命周期
Maven 生命周期是为了对所有的构建过程进行抽象和统一,开发了一套高度完善的、易扩展的生命周期。这个生命周期包含了项目的清理、初始化、编译、测试、打包、集成测试、验证、部署和站点生成等几乎所有构建步骤。
Maven 生命周期本身不做任何实际的工作,实际的任务都交给插件来完成。这样的设计,既保证了 Maven 整体框架的轻便,也最大程度的扩展性。
Maven 生命周期抽象了构建的各个步骤,明确了它们的逻辑次序,但没有提供具体的实现,通过插件来完成实际的工作,每个构建步骤都可以绑定一个或者多个插件行为。为了让 Maven 开箱即用,Maven 为大多数构建步骤编写并绑定了默认插件。比如针对编译的插件有 maven-compiler-plugin
,针对测试的插件有 maven-surefire-plugin
等。
生命周期步骤
在 Maven 中,有三套相互独立的生命周期,分别是 clean
、default
和 site
。
-
clean
:clean 生命周期的目的是清理项目; -
default
:default 生命周期的目的是构建项目; -
site
:site 生命周期的目的是建立项目站点;
每个生命周期包含一些阶段(phase),这些阶段是有顺序的,并且后面的阶段依赖于前面的阶段。以 clean
生命周期为例,它包含的阶段有 pre-clean
、clean
和 post-clean
:
- 当我们调用
pre-clean
的时候,只有pre-clean
阶段执行; - 当我们调用
clean
的时候,pre-clean
和clean
阶段会按顺序执行; - 当我们调用
post-clean
的时候,pre-clean
、clean
和post-clean
都会按顺序执行;
和生命周期阶段的前后依赖关系相比,clean
、default
和 site
这三套生命周期本身是相互独立的,我们可以仅仅调用 clean
生命周期的某个阶段,或者仅仅调用 default
生命周期的某个阶段,而不会对其它生命周期产生任何影响。
clean 生命周期
阶段 | 执行清理前需要完成的工作 |
---|---|
pre-clean | 执行清理前需要完成的工作 |
clean | 清理构建生成的文件 |
post-clean | 执行清理后需要完成的工作 |
default 生命周期
阶段 | 执行清理前需要完成的工作 |
---|---|
validate | – |
initialize | – |
generate-sources | – |
process-sources | – |
generate-resources | – |
process-resources | 处理项目主资源(’src/main/resources’)文件,如进行变量替换等工作 |
compile | 编译项目的源码 |
process-classes | – |
generate-test-sources | – |
process-test-sources | 处理项目测试资源(’src/test/resources’)文件 |
generate-test-resources | – |
process-test-resources | – |
test-compile | 编译项目测试代码 |
process-test-classes | – |
test | 使用单元测试框架运行测试,测试代码不会被打包或部署 |
prepare-package | – |
package | 打包编译好的代码 |
pre-integration-test | – |
integration-test | – |
post-integration-test | – |
verify | 包校验操作 |
install | 安装包到Maven本地仓库 |
deploy | 将包部署到远程仓库 |
site 生命周期
阶段 | 执行清理前需要完成的工作 |
---|---|
pre-site | 在生成项目站点前执行一些工作 |
site | 生成项目站点文档 |
post-site | 在生成项目站点后执行一些工作 |
site-deploy | 将生成项目站点发布到服务器上 |
常用命令详解
我们通过 Maven 命令行来编译、测试和打包程序的命令,而这些命令其实就是完成了生命周期的操作。
- mvn clean:调用插件完成
clean
生命周期的clean
阶段的操作,实际调用的是pre-clean
和clean
两个阶段; - mvn test:调用
default
生命周期对应的阶段的插件,完成从validate
到test
阶段的所有操作; - mvn clean install:调用
clean
周期的clean
阶段和default
的install
阶段,实际调用的是pre-clean
、clean
以及validate
到install
阶段; - mvn clean deploy site-deploy:调用完整的三个生命周期所有阶段(
post-clean
不被调用);