Maven的生命周期,阶段,插件,目标的关系

生命周期(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

实际执行了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目标绑定的

可在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)和插件目标可以同时使用

mvn clean dependency:copy-dependencies package

执行了clean周期的pre-clean和clean阶段,dependency插件的copy-dependencies目标,default周期package阶段及package之前的所有阶段。

生命周期与阶段的关系表及部分阶段默认绑定的插件目标

顺序生命周期阶段插件:目标
1cleanpre-clean
2cleanclean:clean
3post-clean
—分隔线——分隔线——分隔线—
1defaultvalidate
2initialize
3generate-sources
4process-sources
5generate-resources
6process-resourcesresources:resources
7compilecompiler:compile
8process-classes
9generate-test-sources
10process-test-sources
11generate-test-resources
12process-test-resourcesresources:testResources
13test-compilecompiler:testCompile
14process-test-classes
15testsurefire:test
16prepare-package
17package
18pre-integration-test
19integration-test
20post-integration-test
21verify
22installinstall:install
23deploydeploy:deploy
—分隔线——分隔线——分隔线—
1sitepre-site
2sitesite:site
3post-site
4site-deploysite:deploy

原文看这里

    原文作者:贴地飞行的胖纸
    原文地址: https://www.jianshu.com/p/cbc94ad54167
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞