Maven
maven作為一個功能豐富的java應用程序管理工具,其提供的插件管理機制為其擴展帶來了極大的便利;
本文以統計指定目錄下有多少個.java為后綴的文件為例,說明如何自定義maven插件。
Maven插件的命名規范
按照官方建議,maven插件的命名建議為xxxx-maven-plugin,這樣命名有兩個好處
1、maven-xxxx-plugin為maven官方插件命名,使用這種命名方式可能侵權
2、自定義插件maven執行命令為mvn groupId:artifactId:goal,使用推薦命名方式,maven命令可以簡化為mvn xxxx:goal
MoJo
Maven plain Old Java Object,插件執行目標,一個插件可以包含多個Mojo
創建Mojo工程
1、創建maven工程,選擇類型為mojo
2、指定groupId、artifactId、版本號
3、在pom文件中指定打包類型為maven-plugin
4、添加依賴
5、創建mojo實現類,該實現類繼承自AbstractMojo
注意這里要通過@Mojo注解指定插件goalPrefix,否則插件無法生成成功
6、mvn clean install生成插件
測試自定義插件
1.創建maven工程
2、執行mvn bale:filestat,看到正常調用自定義Mojo
在測試項目中指定executions,通過mvn install命令執行插件
注意:一定要指定執行階段,否則插件無法正常運行
測試:
通過@Parameter注解指定Mojo輸入
1、指定@Parameter注解property
2、測試項目中添加configuration
執行結果:
統計指定目錄下java文件的個數
Mojo源碼:
@Mojo(name = "filestat") public class FileStatisticMojo extends AbstractMojo { @Parameter(property = "path") private String path; @Override public void execute() throws MojoExecutionException, MojoFailureException { long fileCount = 0; File file = new File(path); File[] files = file.listFiles(); if (files != null) { fileCount = Arrays.stream(files) .map(File::getName) .filter(fileName -> fileName.endsWith(".java")) .count(); } getLog().warn("Java file count: " + fileCount); } }
執行效果:
這里遇到了一個問題,在生成插件時,報如下的錯誤:
Failed to execute goal org.apache.maven.plugins:maven-plugin-plugin:3.2:descriptor (default-descriptor) on project bale-maven-plugin: Execution default-descriptor of goal org.apache.maven.plugins:maven-plugin-plugin:3.2:descriptor failed: 2164
原因:
Mojo中使用了java8編程,因此需要在插件pom文件中添加maven-plugin-plugin編譯依賴,並顯式指定版本號為3.5.2及以上