Mavenjava
maven做爲一個功能豐富的java應用程序管理工具,其提供的插件管理機制爲其擴展帶來了極大的便利;apache
本文以統計指定目錄下有多少個.java爲後綴的文件爲例,說明如何自定義maven插件。編程
Maven插件的命名規範maven
按照官方建議,maven插件的命名建議爲xxxx-maven-plugin,這樣命名有兩個好處ide
一、maven-xxxx-plugin爲maven官方插件命名,使用這種命名方式可能侵權工具
二、自定義插件maven執行命令爲mvn groupId:artifactId:goal,使用推薦命名方式,maven命令能夠簡化爲mvn xxxx:goal測試
MoJospa
Maven plain Old Java Object,插件執行目標,一個插件能夠包含多個Mojo插件
建立Mojo工程3d
一、建立maven工程,選擇類型爲mojo
二、指定groupId、artifactId、版本號
三、在pom文件中指定打包類型爲maven-plugin
四、添加依賴
五、建立mojo實現類,該實現類繼承自AbstractMojo
注意這裏要經過@Mojo註解指定插件goalPrefix,不然插件沒法生成成功
六、mvn clean install生成插件
測試自定義插件
1.建立maven工程
二、執行mvn bale:filestat,看到正常調用自定義Mojo
在測試項目中指定executions,經過mvn install命令執行插件
注意:必定要指定執行階段,不然插件沒法正常運行
測試:
經過@Parameter註解指定Mojo輸入
一、指定@Parameter註解property
二、測試項目中添加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及以上