0、創(chuàng)建項目
創(chuàng)建一個空的maven項目。申明項目類型為maven組件。
<packaging>maven-plugin</packaging>
增加依賴
<dependencies>
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-plugin-api</artifactId>
<version>3.5.4</version>
</dependency>
<dependency>
<groupId>org.apache.maven.plugin-tools</groupId>
<artifactId>maven-plugin-annotations</artifactId>
<version>3.5</version>
<scope>provided</scope>
</dependency>
</dependencies>
設置項目build配置
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.3</version>
<configuration>
<encoding>UTF-8</encoding>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
</plugins>
</build>
1、組件命名
插件命名為 <myplugin>-maven-plugin。其中myplugin就是你的組件名稱。比如這個demo項目的插件名稱就是demo-maven-plugin。
不要使用maven-<myplugin>-plugin,因為該命名是 Maven 團隊維護官方插件的保留命名方式,使用這個命名方式會侵犯 Apache Maven 商標。
2、自定義組件實現(xiàn)類
Mojo 就是 Maven plain Old Java Object。每一個 Mojo 就是 Maven 中的一個執(zhí)行目標(executable goal),而插件則是對單個或多個相關的 Mojo 做統(tǒng)一分發(fā)。一個 Mojo 包含一個簡單的 Java 類。插件中多個類似 Mojo 的通用之處可以使用抽象父類來封裝。
繼承AbstractMojo,編寫自己的組件執(zhí)行代碼。
如DemoMojo,定義計算求和的組件,定義num1,num2,記得需要設置get,set方法。
package com.zxbking.plugin;
import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.MojoFailureException;
import org.apache.maven.plugins.annotations.LifecyclePhase;
import org.apache.maven.plugins.annotations.Mojo;
import org.apache.maven.plugins.annotations.Parameter;
/**
* Created by zhangxb on 2019/2/21.
*/
@Mojo(name = "sumplugin", defaultPhase = LifecyclePhase.PACKAGE)
public class DemoMojo extends AbstractMojo {
@Parameter
private int num1;
@Parameter
private int num2;
@Override
public void execute() throws MojoExecutionException, MojoFailureException {
System.out.println("num1 = " +num1 );
System.out.println("num2 = " +num2 );
System.out.println("sum = "+(num1+num2) );
}
public int getNum1() {
return num1;
}
public void setNum1(int num1) {
this.num1 = num1;
}
public int getNum2() {
return num2;
}
public void setNum2(int num2) {
this.num2 = num2;
}
}
3、發(fā)布組件
完成mojo類進行編輯后,執(zhí)行mvn clean install添加到本地庫?;蛘甙l(fā)布到遠程庫。
4、引入組件
在需要使用這個組件的項目的pom文件中,增加一下代碼
<build>
<plugins>
<plugin>
<groupId>com.zxbking.plugin</groupId>
<artifactId>demo-maven-plugin</artifactId>
<version>1.0-SNAPSHOT</version>
<configuration>
<num1>10</num1>
<num2>20</num2>
</configuration>
</plugin>
<plugins>
<build>
5、運行組件
使用命令啟動
mvn com.zxbking.plugin:demo-maven-plugin:1.0-SNAPSHOT:sumplugin
同個項目里面,組件可以直接使用mvn demo:sunplugin啟動運行。不同項目則需要對應的maven庫里面存在。
使用idea工具啟動,雙擊啟動

image
6、注意事項
如果設置的組件參數(shù)沒有設置get/set方法,在配置pom里面會存在找不到參數(shù)的問題。