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及以上