生命周期(Lifecycle)
Maven的生命周期分为互相独立的三部分,分别是clean,default,site。 而每一个周期又包括若干阶段。
1. clean:用于清理项目,分为3个阶段
2. default:用于构建项目,分为23个阶段
3. site:用于建立项目站点,分为4个阶段
阶段(Phase)
周期所包含的阶段是有前后顺序的,并且后面的阶段依赖于前面的阶段。
阶段的使用
在执行maven命令时,mvn命令之后使用的参数便是maven的各个阶段。
例如:
mvn compile
此命令使用了deault周期的compile阶段。
例如:
mvn clean deploy
此命令使用了clean周期的clean阶段和default周期的deploy阶段。
阶段的顺序
在调用maven的阶段时,会顺序执行本周期当前阶段之前的所有阶段,直至当前阶段。
例如:clean周期共有3个阶段,按顺序分别如下:
1. pre-clean
2. clean
3. post-clean
当执行命令
mvn clean
执行了clean同期的pre-clean和clean,共2个阶段。
当执行命令
mvn compile
compile阶段属于default周期,而default周期有23个阶段,compile排序第7位,所以实际执行了default周期的第1阶段validate至第7阶段compile,共7个阶段。包括:
1. validate
2. initialize
3. generate-sources
4. process-sources
5. generate-resources
6. process-resources
7. compile
那么各个阶段到底是如何执行的呢?Maven内部是通过插件中的目标来实现。
插件(plugin)和目标(goal)
Maven的操作是基于不同的插件的不同目标来实现的
一个插件中包括若干目标,而每个目标会执行一个特定的任务task。
例如:
mvn clean
在上面这个命令中,使用的参数是clean阶段,而实际执行的是maven-clean-plugin插件的clean目标。
因为clean周期的clean阶段是默认绑定到clean插件的clean目标绑定的。(不同的clean)
可在maven-core-*.jar包的META-INF/plexus/components.xml中找到此绑定关系。
<component>
<role>org.apache.maven.lifecycle.Lifecycle</role>
<implementation>org.apache.maven.lifecycle.Lifecycle</implementation>
<role-hint>clean</role-hint>
<configuration>
<id>clean</id>
<phases>
<phase>pre-clean</phase>
<phase>clean</phase>
<phase>post-clean</phase>
</phases>
<default-phases>
<clean>
org.apache.maven.plugins:maven-clean-plugin:2.5:clean
</clean>
</default-phases>
</configuration>
</component>
其它详细的绑定关系可查看META-INF/plexus目录下的xml文件。
常用的插件
1. maven-clean-plugin
2. maven-resouces-plugin
3. maven-compiler-plugin
4. maven-deploy-plugin
5. maven-surefire-plugin
6. maven-install-plugin
查看更多插件
直接运行插件
可使用“插件名:目标名”的参数形式直接运行某插件的某目标。
例如:
mvn dependency:copy-dependencies
以上命令执行了dependency插件的copy-dependencies目标。
阶段(phase)和插件目标(goal)可以同时使用
例如:
mvn clean dependency:copy-dependencies package
以上命令执行了clean周期的pre-clean和clean阶段,dependency插件的copy-dependencies目标,default周期package阶段及package之前的所有阶段。
生命周期与阶段的关系表及部分阶段默认绑定的插件目标
顺序 | 生命周期 | 阶段 | 插件:目标 |
---|---|---|---|
1 | clean | pre-clean | |
2 | clean | clean:clean | |
3 | post-clean | ||
—分隔线— | —分隔线— | —分隔线— | |
1 | default | validate | |
2 | initialize | ||
3 | generate-sources | ||
4 | process-sources | ||
5 | generate-resources | ||
6 | process-resources | resources:resources | |
7 | compile | compiler:compile | |
8 | process-classes | ||
9 | generate-test-sources | ||
10 | process-test-sources | ||
11 | generate-test-resources | ||
12 | process-test-resources | resources:testResources | |
13 | test-compile | compiler:testCompile | |
14 | process-test-classes | ||
15 | test | surefire:test | |
16 | prepare-package | ||
17 | package | ||
18 | pre-integration-test | ||
19 | integration-test | ||
20 | post-integration-test | ||
21 | verify | ||
22 | install | install:install | |
23 | deploy | deploy:deploy | |
—分隔线— | —分隔线— | —分隔线— | |
1 | site | pre-site | |
2 | site | site:site | |
3 | post-site | ||
4 | site-deploy | site:deploy |
原文看这里