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 Listlist; 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 Listlist;复制代码
它和你用过的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架构
获取架构视频资源(后期还会分享不同的优质资源噢)。