Maven生命周期
重要概念
生命周期(Lifecycle)
Maven有三种不同的生命周期(Lifecycle),分别是Clean、Default、Site。每个生命周期又包含不同的阶段(Phase)。
阶段(Phase)
当我们在运行一个命令的时候,该命令都会对应某个生命周期的某个阶段,并且该生命周期中的在此阶段之前的命令都会被执行。比如,mvn clean
等同于 mvn pre-clean clean
,如果我们运行 mvn post-clean
,那么 pre-clean,clean
都会被运行。这是Maven很重要的一个规则,可以大大简化命令行的输入。
目标(goal)
具体某个阶段应该做什么工作,怎么做,Maven有默认的行为,当然也可以通过插件进行定制修改。这就引入了Maven中另一个重要概念:goal。一个phase可以绑定很多个goal,至少为一个,没有goal的phase是没有意义的。goal也是按顺序执行的,一个phase被执行时,绑定到phase里的goal会按绑定的时间被顺序执行,不管phase己经绑定了多少个goal,你自己定义的goal都可以继续绑到phase中。
mojo
Lifecycle与Phase与goal都是概念上的东西,mojo才是做具体事情的,可以简单理解mojo为goal的实现类,它继承于AbstractMojo,有一个execute方法,goal等的定义都是通过在mojo里定义一些注释的anotation来实现的,maven会在打包时,自动根据这些anotation生成一些xml文件,放在plugin的jar包里。
lifecycle与phase与goal就是级别的大小问题,引用必须是从高级引用下级(goal绑定到phase,执行时,phase会调用绑定到它那的goal),也不能跨级引用,如lifecycle可以引用任意的phase,不同lifecycle可以同时引用相同的phase,lifecycle不能跨级引用goal。goal会绑定到任意的phase中,也就是说不同的phase可以同时引用相同的goal,所以goal可以在一个lifecycle里被重复执行。
Clean Lifecycle
在进行真正的构建之前进行一些清理工作,Clean声明周期包含如下三个Phase。
pre-clean | execute processes needed prior to the actual project cleaning |
clean | remove all files generated by the previous build |
post-clean | execute processes needed to finalize the project cleaning |
比如,我们在执行mvn clean的时候,其实是让Maven做它的Clean生命周期中的clean阶段应该去做的工作(当然,包含Clean生命周期中clean阶段之前的所有阶段的工作)。
Default Lifecycle
构建的核心部分,编译,测试,打包,部署等等。
validate | validate the project is correct and all necessary information is available. |
initialize | initialize build state, e.g. set properties or create directories. |
generate-sources | generate any source code for inclusion in compilation. |
process-sources | process the source code, for example to filter any values. |
generate-resources | generate resources for inclusion in the package. |
process-resources | copy and process the resources into the destination directory, ready for packaging. |
compile | compile the source code of the project. |
process-classes | post-process the generated files from compilation, for example to do bytecode enhancement on Java classes. |
generate-test-sources | generate any test source code for inclusion in compilation. |
process-test-sources | process the test source code, for example to filter any values. |
generate-test-resources | create resources for testing. |
process-test-resources | copy and process the resources into the test destination directory. |
test-compile | compile the test source code into the test destination directory |
process-test-classes | post-process the generated files from test compilation, for example to do bytecode enhancement on Java classes. For Maven 2.0.5 and above. |
test | run tests using a suitable unit testing framework. These tests should not require the code be packaged or deployed. |
prepare-package | perform any operations necessary to prepare a package before the actual packaging. This often results in an unpacked, processed version of the package. (Maven 2.1 and above) |
package | take the compiled code and package it in its distributable format, such as a JAR. |
pre-integration-test | perform actions required before integration tests are executed. This may involve things such as setting up the required environment. |
integration-test | process and deploy the package if necessary into an environment where integration tests can be run. |
post-integration-test | perform actions required after integration tests have been executed. This may including cleaning up the environment. |
verify | run any checks to verify the package is valid and meets quality criteria. |
install | install the package into the local repository, for use as a dependency in other projects locally. |
deploy | done in an integration or release environment, copies the final package to the remote repository for sharing with other developers and projects. |
我们最常用的就是mvn package
或者mvn install
或者mvn compile
了。
Site Lifecycle
生成项目报告,站点,发布站点。
pre-site | execute processes needed prior to the actual project site generation |
site | generate the project's site documentation |
post-site | execute processes needed to finalize the site generation, and to prepare for site deployment |
site-deploy | deploy the generated site documentation to the specified web server |
参考
Maven plugin中的lifecycle、phase、goal、mojo概念及作用的理解
Introduction to the Build Lifecycle
What are Maven goals and phases and what is their difference?
Last updated