首页 > 其他分享 >Maven plugin中的lifecycle、phase、goal、mojo概念及作用的理解

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

时间:2023-08-28 10:36:53浏览次数:35  
标签:goal plugin 绑定 test phase lifecycle


      首先,说些题外话,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中,它们三者的关系可以用公司里的 总领导,组领导,与职员的关系来解释

标签:goal,plugin,绑定,test,phase,lifecycle
From: https://blog.51cto.com/u_16237557/7260823

相关文章

  • Maven的发布plugin配置
    <build> <plugins> <plugin> <!--编译插件--> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>2.3.2</version> <......
  • 新版Jadx 加载dex报错 jadx.plugins.input.dex.DexException:Bad checksum 解决方法
    <table><tr><tdbgcolor=orange>本文所有教程及源码、软件仅为技术研究。不涉及计算机信息系统功能的删除、修改、增加、干扰,更不会影响计算机信息系统的正常运行。不得将代码用于非法用途,如侵立删!</td></tr></table>新版Jadx加载dex报错jadx.plugins.input.dex.DexException:B......
  • 新版Jadx 加载dex报错 jadx.plugins.input.dex.DexException:Bad checksum 解决方法
    本文所有教程及源码、软件仅为技术研究。不涉及计算机信息系统功能的删除、修改、增加、干扰,更不会影响计算机信息系统的正常运行。不得将代码用于非法用途,如侵立删!新版Jadx(1.6+)加载dex报错jadx.plugins.input.dex.DexException:Badchecksum解决方法环境win10Jadx1.6......
  • 【MySQL 8.0】通过Clone Plugin实现数据库的复制
    (root@node01)>createuser'donor'@'%'identifiedby'donor';QueryOK,0rowsaffected(0.10sec)(root@node01)>grantbackup_adminon*.*to'donor'@'%';QueryOK,0rowsaffected(0.23sec)(r......
  • eslint-config-prettier和eslint-plugin-prettier有什么关系
    `eslint-config-prettier`和`eslint-plugin-prettier`是用于与ESLint和Prettier集成的两个不同的包。1.`eslint-config-prettier`:这是一个ESLint配置规则的包,它将禁用与Prettier冲突的ESLint规则。使用`eslint-config-prettier`可以确保ESLint规则与Prettier......
  • Spring源码搭建导依赖时报错:Failed to apply plugin 'kotlin'.
    原因是kotlin插件的版本与gradle中指定的版本不一致,我的是1.8.0,spring5.3.x版本gradle配置文件指定的kotlin版本是1.5.32,修改成1.8.0......
  • Java踩坑1.Plugin org.apache.maven.plugins:maven-install-plugin:2.5 could not
    首次运行maveninstall或任何一个插件时,报错:Downloadingfromhuaweicloud:https://repo.huaweicloud.com/repository/maven/org/apache/maven/plugins/maven-install-plugin/2.5/maven-clean-plugin-2.5.pom[INFO]---------------------------------------------------------......
  • vite 找不到依赖模块:[plugin:vite:dep-pre-bundle]
    问题描述:运行项目时,出现[plugin:vite:dep-pre-bundle]错误。这种问题一般为依赖的包未正常配置相关字段,导致vite无法找到包的入口。遇到这种模块内、找不到引用模块的,都可以用路径别名来解决解决办法://vite.config.jsalias:[{find:'fs',replacement:'node_modules/......
  • pinia持久化存储插件-pinia-plugin-persistedstate
    pinia-plugin-persistedstate丰富的功能可以使PiniaStore的持久化更易配置:与vuex-persistedstate相似的API所有Store均可单独配置自定义storage和数据序列化恢复持久化数据前后的hook每个Store具有丰富的配置兼容Vue2和3无任何外部依赖安装使用你喜......
  • 利用uplugin对比Webpack和Rollup插件系统
    本文由华为云云岭团队松塔同学分享~江湖上一直流传一种说法:Rollup的插件系统设计,相比与webpack,要更加科学顺手。(网络上对webpack插件编写的吐槽不计其数)Talkischeap,本文基于unplugin这个三方库来对比研究一下二者的插件系统。Unplugin是一个插件编写工具,它可以让开发者用......