zoukankan      html  css  js  c++  java
  • maven插件编写

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

  • 相关阅读:
    pandas:由列层次化索引延伸的一些思考
    机器学习中的异常检测手段
    GBDT+LR算法解析及Python实现
    模型性能提升操作
    /usr/bin/python: can't decompress data; zlib not available 的异常处理
    FM算法解析及Python实现
    vue项目中的iview如何验证for循环的输入框、日期选择框,及表单回填验证不通过问题
    JavaScript的数组方法(array)
    Js中toFixed()方法保留小数不精准的问题
    vscode中iview的</Col>标签报错问题
  • 原文地址:https://www.cnblogs.com/sniffs/p/11985699.html
Copyright © 2011-2022 走看看