`

Maven plugin中的lifecycle、phase、goal、mojo概念及作用的理解

    博客分类:
  • Java
阅读更多

      首先,说些题外话,maven的plugin真的很容易写,很多时候,我们只是被plugin这个词吓倒了,总以为插件这玩意,是专家才能写的,我maven都没精通,怎么写得出自己的plugin呢,其实不然,起码在maven中,写一个自己的plugin还是非常简单的,其它软件的插件,要看情况,有些的确是要天才级人物才写得出,有一些呢,也无非是用别人做的傻瓜程序,可以轻松做出来,但是,有决心做,绝大数事情我们是做得到的!

 

      要写自己的maven plugin的话,lifecycle与phase与goal与mojo的概念是一定要理解的,下面是我自己的一些见解

 

lifecycle:生命周期,这是maven最高级别的的控制单元,它是一系列的phase组成,也就是说,一个生命周期,就是一个大任务的总称,不管它里面分成多少个子任务,反正就是运行一个lifecycle,就是交待了一个任务,运行完后,就得到了一个结果,中间的过程,是phase完成的,自己可以定义自己的lifecycle,包含自己想要的phase

 

常见的lifecycle有 | clean | package ear | pageage jar | package war | site等等

 

phase:可以理解为任务单元,lifecycle是总任务,phase就是总任务分出来的一个个子任务,但是这些子任务是被规格化的,它可以同时被多个lifecycle所包含,一个lifecycle可以包含任意个phase,phase的执行是按顺序的,一个phase可以绑定很多个goal,至少为一个,没有goal的phase是没有意义的

 

下面就是一些default lifecycle的phase

validate 
initialize 
generate-sources 
process-sources 
generate-resources 
process-resources
compile 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

 

goal: 这是执行任务的最小单元,它可以绑定到任意个phase中,一个phase有一个或多个goal,goal也是按顺序执行的,一个phase被执行时,绑定到phase里的goal会按绑定的时间被顺序执行,不管phase己经绑定了多少个goal,你自己定义的goal都可以继续绑到phase中

 

mojo: lifecycle与phase与goal都是概念上的东西,mojo才是做具体事情的,可以简单理解mojo为goal的实现类,它继承于AbstractMojo,有一个execute方法,goal等的定义都是通过在mojo里定义一些注释的anotation来实现的,maven会在打包时,自动根据这些anotation生成一些xml文件,放在plugin的jar包里

 

 

      抛开mojo不讲,lifecycle与phase与goal就是级别的大小问题,引用必须是从高级引用下级(goal绑定到phase,也可理间为phase引用goal,只是在具体绑定时,不会phase定义引用哪些goal,但是执行是,却是phase调用绑定到它那的goal),也不能跨级引用,如lifecycle可以引用任意的phase,不同lifecycle可以同时引用相同的phase,lifecycle不能跨级引用goal。goal会绑定到任意的phase中,也就是说不同的phase可以同时引用相同的goal,所以goal可以在一个lifecycle里被重复执行哦,goal自然也不能说绑定到lifecycle中,它们三者的关系可以用公司里的 总领导,组领导,与职员的关系来解释

分享到:
评论
1 楼 zxjlwt 2016-02-24  
学习了
素人派
http://surenpi.com

相关推荐

    maven工具包 maven plugins

    在这个例子中,我们启用了`maven-compiler-plugin`插件,并配置了JDK版本为1.8。 **3. Maven插件的使用** - **安装插件**:如果需要使用非中央仓库的插件,可以通过`<pluginRepositories>`元素添加自定义仓库。 -...

    Maven权威指南 很精典的学习教程,比ANT更好用

    Maven生命周期 (Lifecycle) 3.5.3. Maven坐标 (Coordinates) 3.5.4. Maven仓库(Repositories) 3.5.5. Maven依赖管理 (Dependency Management) 3.5.6. 站点生成和报告 (Site Generation and Reporting) 3.6. ...

    custom-lifecycle.rar

    例如,创建一个名为 "custom-lifecycle-maven-plugin" 的插件,定义一个独有的 "my-phase" 阶段,并在 pom.xml 文件中配置这个插件。 2. **扩展点**:Maven 提供了扩展点机制,允许在生命周期的特定位置插入自定义...

    [maven] 常用插件解析.docx

    用户可以通过两种方式调用 Maven 插件目标,一种是将插件目标与生命周期阶段(lifecycle phase)绑定,另一种是直接在命令行指定要执行的插件目标。 Maven 官方提供了两个插件列表,第一个列表的 GroupId 为 org....

    Maven.docx

    生命周期中的每个阶段都可能包含多个目标(goal),目标是实际执行的动作,由Mojo(Maven Old Java Object)实现。Mojo是Maven插件(plugin)的一部分,每个插件可以包含多个Mojo,定义特定的构建任务。 【生命周期...

    maven 3.5.0

    - **生命周期(Lifecycle)**:Maven 的生命周期包括清理、编译、测试、打包、验证、集成测试、部署等多个阶段,每个阶段包含一系列的插件目标(Mojo)。 ### 2. Maven 3.5.0 的改进与特性 - **性能提升**:Maven ...

    apache-maven-3.0.2-bin

    * [MNG-4919] - Plugin execution contributed by lifecycle mapping gets lost when same goal is bound multiple times * [MNG-4923] - [regression] java.lang.ClassNotFoundException: org.apache.maven....

    详解Maven命令大全

    Maven 是一个项目管理工具,它包含了一个项目对象模型 (Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Dependency Management System),和用来运行定义在生命周期...

Global site tag (gtag.js) - Google Analytics