之前雖然一直知道maven插件是可以自定義的,不過一致沒有用過。最近接觸到了swagger項目中的codegen自動生成代碼的功能,並且在codegen源碼中,也是存在maven插件功能的,所以自己就嘗試着自定義一個maven插件。並且從網上搜了一些資料自己寫了一個demo。防止自己忘記,所以記錄下來,哈哈哈!
maven插件工程
新建一個maven工程,名字為maven-plugin-demo1

這里注意的是,打包方式packaging為maven-plugin。
下面是我的maven的pom文件
<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>site.wangxin520</groupId>
<artifactId>maven-plugin-demo1</artifactId>
<version>0.0.1-SNAPSHOT</version>
<build>
<!-- 這里注意的是,需要引用一個maven的plugin-plugin插件,並且配置好execution,這個是必須要有的,不然沒用 -->
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-plugin-plugin</artifactId>
<version>3.2</version>
<executions>
<execution>
<goals>
<goal>descriptor</goal>
</goals>
<phase>generate-resources</phase>
</execution>
</executions>
</plugin>
</plugins>
<!-- 這里是用來防止eclipes報錯的 -->
<pluginManagement>
<plugins>
<!--This plugin's configuration is used to store Eclipse m2e settings only. It has no influence on the Maven build itself.-->
<plugin>
<groupId>org.eclipse.m2e</groupId>
<artifactId>lifecycle-mapping</artifactId>
<version>1.0.0</version>
<configuration>
<lifecycleMappingMetadata>
<pluginExecutions>
<pluginExecution>
<pluginExecutionFilter>
<groupId>
org.apache.maven.plugins
</groupId>
<artifactId>
maven-plugin-plugin
</artifactId>
<versionRange>
[3.2,)
</versionRange>
<goals>
<goal>descriptor</goal>
</goals>
</pluginExecutionFilter>
<action>
<ignore></ignore>
</action>
</pluginExecution>
</pluginExecutions>
</lifecycleMappingMetadata>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
<!-- 注意打包方式 -->
<packaging>maven-plugin</packaging>
<!-- 需要添加依賴,一個注解用的,一個是api用的 -->
<dependencies>
<dependency>
<groupId>org.apache.maven.plugin-tools</groupId>
<artifactId>maven-plugin-annotations</artifactId>
<version>3.2</version>
</dependency>
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-plugin-api</artifactId>
<version>3.3.9</version>
</dependency>
</dependencies>
</project>
當配置好maven的pom文件后,下面就開始編寫一個自定義的插件java類。
這里需要注意的是該自定義插件類,需要繼承AbstractMojo.java,然后實現其中的execute方法
package site.wangxin520.maven.plugin.demo.test1;
import java.util.List;
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;
/**
*
* @author 王鑫
*
* 該類就是maven自定義插件類
*
*/
// mojo注解就是maven插件的注解,具體什么我忘記了。name就是后面使用該插件的時候excuation里面的,后面配置的是生命周期,我這里配置了install,即默認是安裝時候執行本插件
@Mojo(name = "mojoDemo1", defaultPhase = LifecyclePhase.INSTALL)
public class MojoDemo1 extends AbstractMojo {
// 配置的是本maven插件的配置,在pom使用configration標簽進行配置 property就是名字,在配置里面的標簽名字。在調用該插件的時候會看到
@Parameter(property = "name")
private String name;
@Parameter(property = "modules")
private List<String> modules;
// 執行的相關代碼,即插件執行的語句。
@Override
public void execute() throws MojoExecutionException, MojoFailureException {
System.out.println("!!!!!!!!!!!!!!!!!!!!");
System.out.println(name);
System.out.println("~~~~~~~~~~~~~~~~~~~~");
System.out.println(modules);
for (String string : modules) {
System.out.println(string);
}
System.out.println("!!!!!!!!!!!!!!!!!!!!");
}
}
當着一切都弄好后,就執行maven install,將本插件安裝到本地的maven倉庫中。方便后面調用。
這里需要注意一下,maven插件的配置參數什么的,可以在maven官網看到。這里就不多做贅述了,后面我會加上連接。
maven插件測試工程
創建maven工程maven-plugin-test

為了方便后面使用,我弄成了組合工程,其中有兩個模塊。
<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>site.wangxin520</groupId>
<artifactId>maven-plugin-test</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<modules>
<module>maven-plugin-part1</module>
<module>maven-plugin-part2</module>
</modules>
<!-- 配置插件 -->
<build>
<plugins>
<plugin>
<!-- 這里寫剛剛創建的maven插件的groupid和artifactid -->
<groupId>site.wangxin520</groupId>
<artifactId>maven-plugin-demo1</artifactId>
<version>0.0.1-SNAPSHOT</version>
<executions>
<execution>
<!-- goals里面配置的就是剛剛在@mojo里面的name -->
<goals>
<goal>mojoDemo1</goal>
</goals>
<!-- 這里加入的是相關參數 -->
<configuration>
<name>wangxin</name>
<modules>${project.modules}</modules>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
上面就是添加插件的配置。
下面就進行安裝了。就可以執行自定義maven配置中的excute方法

以上就是maven自定義插件的配置和方法。是不是很簡單!
轉載自 Nixgnaw:www.wangxin520.site