您的位置:首页 > 产品设计 > UI/UE

Maven的Build过程

2015-07-24 11:36 519 查看
1、Lifecycle的定义

Maven通过Lifecycle定义了编译和发布项目的过程

有3个内置的Lifecycle,分别是default,clean,site.

2、Lifecycle与Phase的关系

一个Lifecycle包含多个Phase,这个包含关系是不可修改的,同一个Lifecycle中的Phase之间是具有顺序的,执行某一个Lifecycle中的某个Phase,那么该Lifecycle中该Phase之前的Phase首先会被依序执行

比如

default这个Lifecycle包含的Phase如下所示



执行"mvn compile"命令

在后台会依次执行"validate,initialize,generate-sources,process-sources,generate-resources,process-resources,compile"这7个Phase

clean这个Lifecycle包含的Phase如下所示



执行"mvn clean"命令

在后台会依次执行"pre-clean,clean"这两个Phase

site这个Lifecycle包含的Phase如下所示



执行"mvn post-site"命令

在后台会依次执行"pre-site,site,post-site"这3个Phase

3、Phase与Plugin Goal的关系

Goal是plugin提供的完成具体功能的模块,最终完成任务通过Goal进行。

使用Goal的方式有两种:一种是通过命令行直接调用Goal的方式进行,比如

mvn dependency:copy-dependencies[表示执行"maven-dependency-plugin"这个Plugin中的"copy-dependencies"这个Goal];另外一种是通过Goal能够被绑定到"Lifecycle-Phase体系"中的Phase的途径,一个Phase上可以绑定0到多个Goal,Phase上绑定了0个Goal,那么执行该Phase不会有任何操作发生,Phase上绑定了1到多个Goal,那么执行该Phase会依次执行绑定在该Phase上的Goal,比如执行"site-deploy"这个Phase的时候,默认绑定在该Phase上的Goal是"maven-site-plugin"这个Plugin中的"deploy"这个Goal,该Goal会被执行

4、默认情况下,Phase与Goal的绑定关系

4.1、clean Lifecycle中Phase与Goal的绑定关系



4.2、site Lifecycle中Phase与Goal的绑定关系



4.3、default Lifecycle中Phase与Goal的绑定关系

default Lifecycle中Phase与Goal的绑定关系跟项目的<packaging>配置有关。

4.3.1、<packaging>为ejb/ejb3/jar/par/rar/war



4.3.2、<packaging>为ear



4.3.3、<packaging>为pom



5、Goal的执行顺序

5.1、绑定在同一个Phase上的Goal的执行顺序

一般情况下,先执行Phase上默认绑定的Goal,然后执行在pom.xml中定义的Phase上绑定的Goal。而其实我们可以通过<execution>标签改变一般情况下的执行顺序。

总的来说,Maven采用非常复杂的一个机制来确定绑定在同一个Phase上的Goal的执行顺序。

因而,我们最好还是规定在同一个Phase上至多绑定一个Goal。

5.2、通过"Lifecycle-Phase"绑定Goal机制和直接调用Goal两种形式执行Goal的执行顺序

最终Goal的执行顺序跟“解析Phase上绑定的Goal(如5.1所述,一个Phase上至多绑定一个Goal)之后,完整Goal序列的出现顺序”一致。

比如如下maven命令:

mvn clean compile assembly:single

"clean"这个Phase属于clean这个Lifecycle,"clean"这个Phase的前导Phase有"pre-clean"。

"pre-clean"这个Phase默认无绑定Goal

"clean"这个Phase默认绑定"clean:clean"这个Goal

"compile"这个Phase属于default这个Lifecycle,"compile"这个Phase的前导Phase有"validate,initialize,generate-sources,process-sources,generate-resources,process-resources"

default Lifecycle中Phase与Goal的绑定关系跟项目的<packaging>配置有关,假如现在的<packaging>配置值为jar。

"validate,initialize,generate-sources,process-sources,generate-resources"这些Phase默认无绑定Goal

"process-resources"这个Phase默认绑定"resources:resources"这个Goal

"compile"这个Phase默认绑定"compiler:compile"这个Goal

因此,最终完整的Goal序列为:

clean:clean,resources:resources,compiler:compile,assembly:single

备注:

指代Goal名称的"xxx:goalName"表示法的含义是:"maven-xxx-plugin"这个Plugin中的"goalName"这个Goal。比如"compiler:compile"的含义就是"maven-compiler-plugin"这个Plugin中的"compile"这个Goal。

参考文献:

[1]https://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html

[2]https://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html#Lifecycle_Reference

[3]https://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html#Built-in_Lifecycle_Bindings

[4]http://maven.apache.org/ref/3.3.3//maven-core/lifecycles.html

[5]http://maven.apache.org/ref/3.3.3//maven-core/default-bindings.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: