maven插件编写

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

相关文章
相关标签/搜索