1.生命周期
Clean
pre-clean
clean
post-clean
Default
validate
initialize
generate-sources
process-sources
generate-resources
process-resources
compile
process-classes
generate-test-sources
process-test-sources
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
deploy
Site
pre-site
site
post-site
site-deploy
2.插件绑定
maven在不同的生命周期中会按顺序进入不同的阶段,每个阶段又会执行与该阶段绑定的plugins。如何将plugins绑定到生命周期中呢,maven-compile-plugin又是怎么知道在每次的compile阶段执行的呢?
plugin绑定到生命周期中需要在pom.xml中的
那么具体是在哪个阶段执行呢?看effective pom中对maven-compile-plugin的描述:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
|
主要是在phase节点和goals节点,上面的配置说明了maven-compile-plugin被分别绑定到了compile阶段和test-compile阶段,并且分别执行该插件的compile goal和testCompile goal。
另外有些plugin可能并没有在pom.xml中说明具体的执行阶段,那么就要看该插件中的/META-INF/maven/plugin.xml插件描述文件了,该描述文件说明了该plugin的前缀(goalPrefix),所有的mojos或者说是goal,并且这些goal的名字以及默认的执行阶段,比如compile:testCompile节点就说明了<phase>test-compile</phase>。因此如果没有在pom.xml中说明执行阶段的话,就按照该plugin的goal的自描述中的phase进行绑定。
3.effective-xx
maven有关于自己运行的配置文件settings.xml,该文件可以是$MAVEN_HOME/conf/settings.xml或者$USER/.m2/setttings.xml,并且后者会覆盖前者,可以通过mvn help:effective-settings查看相对于默认的settings.xml所改变的部分。
同样,前面提到的effective-pom也是由多个部分合并而来,首先是项目下的pom.xml,然后是maven的super pom($MAVEN_HOME/lib/maven-model-builder-x.x.x.jar#org/apache/maven/model/pom-x.x.x.xml),还有一些是maven针对不同的生命周期默认绑定的插件信息($MAVEN_HOME/lib/maven-core-x.x.x.jar#/META-INF/plexus/components.xml)。最终的pom可以通过help:effective-pom查看)