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
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
相关文章推荐
- [Java Web]EasyUI中Calendar预设时间的解决
- UITableView的简单使用
- IOS UILocalNotification 本地通知
- iOS 编程 利用UIScrollView 编写无缝循环显示图片
- 安卓使用merge标签和include优化UI布局
- uep开发——财务管理系统的总结
- 如何扩展EasyUI在页面中立即显示选中的本地图片
- Implement Queue using Stacks
- gulp插件(gulp-jmbuild),用于WEB前端构建
- Android高仿QQ v4.7.0全新UI
- 从客户端中检测到有潜在危险的 Request.Form 值
- emulator: ERROR: x86 emulation currently requires hardware acceleration!Please ensure Intel HAXM is
- uilabel自适应高度
- UIPageControl 属性
- IOS开发-UI基础-视图
- UIScrollView常用方法
- UIScrollView属性
- iOS 中UISlider常用知识点
- [LeetCode][Java] Distinct Subsequences
- iOS中UISegmentedControl常用属性