Maven 生命周期

Maven 生命周期

Maven 生命周期是为了对全部的构建过程进行抽象和统一,开发了一套高度完善的、易扩展的生命周期。这个生命周期包含了项目的清理、初始化、编译、测试、打包、集成测试、验证、部署和站点生成等几乎全部构建步骤。服务器

Maven 生命周期自己不作任何实际的工做,实际的任务都交给插件来完成。这样的设计,既保证了 Maven 总体框架的轻便,也最大程度的扩展性。框架

Maven 生命周期抽象了构建的各个步骤,明确了它们的逻辑次序,但没有提供具体的实现,经过插件来完成实际的工做,每一个构建步骤均可以绑定一个或者多个插件行为。为了让 Maven 开箱即用,Maven 为大多数构建步骤编写并绑定了默认插件。好比针对编译的插件有 maven-compiler-plugin,针对测试的插件有 maven-surefire-plugin 等。maven

生命周期步骤

在 Maven 中,有三套相互独立的生命周期,分别是 cleandefaultsitepost

  • clean:clean 生命周期的目的是清理项目;
  • default:default 生命周期的目的是构建项目;
  • site:site 生命周期的目的是创建项目站点;

**每一个生命周期包含一些阶段(phase),这些阶段是有顺序的,而且后面的阶段依赖于前面的阶段。**以 clean 生命周期为例,它包含的阶段有 pre-cleancleanpost-clean单元测试

  • 当咱们调用 pre-clean 的时候,只有 pre-clean 阶段执行;
  • 当咱们调用clean 的时候,pre-cleanclean阶段会按顺序执行;
  • 当咱们调用 post-clean 的时候,pre-cleancleanpost-clean 都会按顺序执行;

和生命周期阶段的先后依赖关系相比,cleandefaultsite 这三套生命周期自己是相互独立的,咱们能够仅仅调用 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-cleanclean 两个阶段;
  • mvn test:调用 default 生命周期对应的阶段的插件,完成从 validatetest 阶段的全部操做;
  • mvn clean install:调用 clean 周期的 clean 阶段和 defaultinstall 阶段,实际调用的是 pre-cleanclean 以及 validateinstall 阶段;
  • mvn clean deploy site-deploy:调用完整的三个生命周期全部阶段(post-clean 不被调用);
相关文章
相关标签/搜索