maven(从零实现一个自定义插件)

1、常用插件

具体常用的有以下这些:

  • findbugs 静态代码检查
  • versions 统一升级版本号
    mvn versions:set -DnewVersion=1.1
  • source 打包源代码
  • tomcat
2、自定义插件

文档
https://maven.apache.org/guides/plugin/guide-java-plugin-development.html

实现自定义扫描项目中java文件个数

  • a)、建立一个maven项目,将packaging改成plugin
<!-- 将打包形式改为plugin -->
<packaging>maven-plugin</packaging>
  • b)、引入plugin的依赖包
    <dependencies>
        <dependency>
            <groupId>org.apache.maven</groupId>
            <artifactId>maven-plugin-api</artifactId>
            <version>3.5.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.maven.plugin-tools</groupId>
            <artifactId>maven-plugin-annotations</artifactId>
            <version>3.6.0</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>
  • c)、创建继承AbstractMojo的类,并重写execute()方法,具体的代码我已上传我的github
@Mojo(name = "findtype", defaultPhase = LifecyclePhase.PACKAGE)
public class ZJYMojo extends AbstractMojo {
    /**
     * 默认读project下src文件下的文件
     */
    @Parameter(property = "project.directory")
    private String path;
    /**
     * 默认判断文件类型是java
     */
    @Parameter(property = "type", defaultValue = "java")
    private String type;
    public void execute() throws MojoExecutionException, MojoFailureException {
        System.out.println("xiaoyuan define plugin " + path);
        // 读取路径下的java文件个数
        // 递归实现
        System.out.println(type + " Files' number in project (Recursive)" + readRecursive(path, ".*?\\."+ type +"$"));
        // 非递归实现
        System.out.println(type + " Files' number in project " + read(path, ".*?\\."+ type +"$"));
    }
    // 递归实现某路径下 存在regex字符串的文件个数
    private int readRecursive(String path, String regex) {}
    // 非递归实现某路径下 存在regex字符串的文件个数
    private int read(String path, String regex) {}
}
  • d)、mvn clean install 打包,在别的项目引用它
<plugins>
    <plugin>
        <groupId>com.xiaoyuan</groupId>
        <artifactId>yuan-maven-plugin</artifactId>
        <version>1.0-SNAPSHOT</version>
        <configuration>
            <!--配置传给插件的参数-->
            <path>${basedir}</path>
        </configuration>
        <!--挂载在package时运行-->
        <executions>
            <execution>
                <phase>package</phase>
                    <goals>
                        <goal>xiaoyuan</goal>
                    </goals>
           </execution>
        </executions>
    </plugin>
</plugins>
  • e)、别的项目使用时 mvn yuan:findtype -Dproject.directory=${basedir}(必填) -Dtype=properties(选填,默认是java)


    image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 我们都知道Maven本质上是一个插件框架,它的核心并不执行任何具体的构建任务,所有这些任务都交给插件来完成,例如编...
    付鹏丶阅读 1,642评论 0 15
  • 转自:http://www.cnblogs.com/crazy-fox/archive/2012/02/09/23...
    晴天哥_王志阅读 2,278评论 2 27
  • 经过Maven生命周期的学习,我们知道在Maven core中仅仅定义了抽象的生命周期,具体的实现是由插件完成的,...
    SonyaBaby阅读 1,299评论 0 3
  • 所有项目的构建都是有生命周期的,这个生命周期包括:项目清理、初始化、编译、测试、打包、集成测试、验证、部署、站点生...
    zlcook阅读 2,833评论 0 21
  • 使用指导 如何添加外部依赖jar包 在Maven工程中添加依赖jar包,很简单,只要在POM文件中引入对应的<de...
    静默虚空阅读 2,821评论 0 13