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
xsi:schemaLocation='http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd'>
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
如果不加,我们只能通过执行插件或者执行命令的方式来执行,如果想让它在执行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] ------------------------------------------------------------------------