博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Maven 自定义插件
阅读量:6238 次
发布时间:2019-06-22

本文共 3679 字,大约阅读时间需要 12 分钟。

1. provide

插件提供者 项目结构

├── pom.xml├── src│   └── main│       ├── java│       │   └── com│       │       └── fantj│       │           └── mypluginprovide│       │               └── MyMojo.java│       └── resources│           └── application.properties└── target    │      └── my-plugin-provide-0.0.1-SNAPSHOT.jar复制代码
1.1 修改packaging
maven-plugin
复制代码
1.2. 修改pom
org.apache.maven
maven-plugin-api
3.5.0
org.apache.maven.plugin-tools
maven-plugin-annotations
3.5
复制代码

这两个依赖是自定义插件必须的依赖,代表了它是一个Mojo工程,里面包含了一些Mojo的接口和抽象类以及注解。

1.3 coding业务逻辑
@Mojo(name = "fantj",defaultPhase = LifecyclePhase.PACKAGE)public class MyMojo extends AbstractMojo {    @Parameter    private String msg;    @Parameter    private List
list; public void execute() throws MojoExecutionException, MojoFailureException { System.out.println("hello plugin: "+msg + "list: "+ list); }}复制代码

注意这里面的@Parameter``@Mojo`` LifecyclePhase.PACKAGE都是org.apache.maven.plugins.annotations包下的:

import org.apache.maven.plugins.annotations.LifecyclePhase;import org.apache.maven.plugins.annotations.Mojo;import org.apache.maven.plugins.annotations.Parameter;复制代码

@Parameter注解会获取消费者配置文件中的变量值并赋值。

defaultPhase = LifecyclePhase.PACKAGE声明了该插件触发的生命周期。

@Mojo定义插件的goal名字。

1.3. clean and install

执行mvn clean install,在target目录下会生成这样一个jar包,这就是插件包。

2. consume

插件消费者 : 项目结构

├── pom.xml└── src    └── main        ├── java        │   └── com        │       └── fantj        │           └── mypluginuse        └── resources            └── application.properties复制代码
2.1 修改pom
4.0.0
com.fantj
my-plugin-consume
0.0.1-SNAPSHOT
com.fantj
my-plugin-provide
0.0.1-SNAPSHOT
hello plugin
one
two
package
fantj
复制代码

如果不加<executions>,我们只能通过执行插件或者执行命令的方式来执行,如果想让它在执行package的时候自动执行,就需要设置该属性,可以把它理解成hook。

2.2 如何传递参数给plugin

在插件提供者中,有个MyMojo的类,有这样一段代码:

@Parameter    private String msg;    @Parameter    private List
list;复制代码

它和你用过的spring注解一样,也是用来以注解的形式获取参数的值。

相对应的,在插件消费者的配置中我们就应该相应的给出参数的定义:

hello plugin
one
two
复制代码

上面的配置与变量名一一对应即可。这时候你会发现maven插件中自动会添加一个plugins选项:

执行该插件:mvn myprovide:fantj 或者直接点击

[fantj@lalala my-plugin-consume]$ mvn myprovide:fantj[INFO] Scanning for projects...[INFO] [INFO] --------------------< com.fantj:my-plugin-consume >---------------------[INFO] Building my-plugin-consume 0.0.1-SNAPSHOT[INFO] --------------------------------[ jar ]---------------------------------[INFO] [INFO] --- my-plugin-provide:0.0.1-SNAPSHOT:fantj (default-cli) @ my-plugin-consume ---hello plugin: hello pluginlist: [one, two][INFO] ------------------------------------------------------------------------[INFO] BUILD SUCCESS[INFO] ------------------------------------------------------------------------[INFO] Total time: 0.347 s[INFO] Finished at: 2018-11-01T19:59:04+08:00[INFO] ------------------------------------------------------------------------复制代码


如果你喜欢我的文章,那麻烦请关注我的公众号,公众号重点分析架构师技术,该公众号还处于初始阶段,谢谢大家的支持。

关注公众号,回复
java架构获取架构视频资源(后期还会分享不同的优质资源噢)。



转载地址:http://rezia.baihongyu.com/

你可能感兴趣的文章
Linux下patch的制作和应用
查看>>
联通专线切换成移动专线问题故障解决
查看>>
Oracle11gR2 for Linux6.4 静默安装
查看>>
IO-字符流-FileReader
查看>>
再谈全局网HBase八大应用场景
查看>>
mysql数据库基本命令
查看>>
如何rename datafile name中存在乱码的数据文件
查看>>
Oracle Sun Exadata V2 ,X2-2,X2-8 主要配置对比
查看>>
制造业如何将工人师傅的隐性技能转化为显性知识?
查看>>
JXplorer 的简单使用
查看>>
__name__ == "__main__"
查看>>
编译安装nginx1.10.2最新版、php7.0.12最新版、mysql5.7.16最新版
查看>>
希尔排序(Golang)
查看>>
修改grub背景图
查看>>
netapp日志中hw_assist: hw_assist functionality is inactive.排错
查看>>
SaltStack实战之配置管理-状态间关系
查看>>
sc 与net命令的区别
查看>>
2018年区块链五大关键趋势预测:区块链与物联网结合有望突破
查看>>
delphi webservices传数据
查看>>
CentOS7离线安装docker问题解决
查看>>