插件提供者 項目結(jié)構(gòu)
├── pom.xml├── src│ └── main│ ├── java│ │ └── com│ │ └── fantj│ │ └── mypluginprovide│ │ └── MyMojo.java│ └── resources│ └── application.properties└── target │ └── my-plugin-provide-0.0.1-SNAPSHOT.jar
<packaging>maven-plugin</packaging>
<dependency> <groupId>org.apache.maven</groupId> <artifactId>maven-plugin-api</artifactId> <version>3.5.0</version></dependency><dependency> <groupId>org.apache.maven.plugin-tools</groupId> <artifactId>maven-plugin-annotations</artifactId> <version>3.5</version></dependency>
這兩個依賴是自定義插件必須的依賴,代表了它是一個Mojo工程,里面包含了一些Mojo的接口和抽象類以及注解。
@Mojo(name = 'fantj',defaultPhase = LifecyclePhase.PACKAGE)public class MyMojo extends AbstractMojo { @Parameter private String msg; @Parameter private List<String> 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
聲明了該插件觸發(fā)的生命周期。
@Mojo
定義插件的goal
名字。
執(zhí)行mvn clean install
,在target目錄下會生成這樣一個jar包,這就是插件包。
插件消費者 : 項目結(jié)構(gòu)
├── pom.xml└── src └── main ├── java │ └── com │ └── fantj │ └── mypluginuse └── resources └── application.properties
<?xml version='1.0' encoding='UTF-8'?><project xmlns='http://maven.apache.org/POM/4.0.0' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:schemaLocation='http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd'> <modelVersion>4.0.0</modelVersion> <groupId>com.fantj</groupId> <artifactId>my-plugin-consume</artifactId> <version>0.0.1-SNAPSHOT</version> <build> <plugins> <plugin> <groupId>com.fantj</groupId> <artifactId>my-plugin-provide</artifactId> <version>0.0.1-SNAPSHOT</version> <configuration> <msg>hello plugin</msg> <list> <list>one</list> <list>two</list> </list> </configuration> <!--在執(zhí)行package時候自動執(zhí)行自定義插件 將插件掛到 phase 中 --> <executions> <execution> <phase>package</phase> <goals> <goal>fantj</goal> </goals> </execution> </executions> </plugin> </plugins> </build></project>
如果不加<executions>
,我們只能通過執(zhí)行插件或者執(zhí)行命令的方式來執(zhí)行,如果想讓它在執(zhí)行package
的時候自動執(zhí)行,就需要設(shè)置該屬性,可以把它理解成hook。
在插件提供者中,有個MyMojo
的類,有這樣一段代碼:
@Parameter private String msg; @Parameter private List<String> list;
它和你用過的spring注解一樣,也是用來以注解的形式獲取參數(shù)的值。
相對應(yīng)的,在插件消費者的配置中我們就應(yīng)該相應(yīng)的給出參數(shù)的定義:
<configuration> <msg>hello plugin</msg> <list> <list>one</list> <list>two</list> </list></configuration>
上面的配置與變量名一一對應(yīng)即可。這時候你會發(fā)現(xiàn)maven插件中自動會添加一個plugins
選項:
執(zhí)行該插件: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] ------------------------------------------------------------------------