maven 插件开发

背景:

项目中使用了一些内部的二方包,有些是公共的工具类封装,有些是一些client的api。在开发的时候通常使用的是SNAPSHOT 版本,在正式发布的时候通常需要使用正式版本,但是这个很容易忽视,导致下一次发布的时候可能因为版本的原因导致线上出错。所以这里开发一个maven插件,在打包的时候可以检验依赖树中内部二方包是否使用了SNAPSHOT版本。


插件开发:

maven插件相关的资料网上都有,不过基本都是最简单的打个hello world。基本就是能帮你搭个环境,其他的就指望不上了。根据上面的背景需求,最重要的是能够获取到当前项目的依赖树。通过注入MavenProject 可以方便的获取相应的依赖,核心代码如下

/**
     * The Maven project to analyze.
     *
     * @parameter expression="${project}"
     * @required
     */
    private MavenProject project;

    /**
     * 当前环境
     *
     * @parameter expression="${envirment}"
     * @required
     */
    String envirment;


    @Override
    public void execute() throws MojoExecutionException, MojoFailureException {
        getLog().info("--------------------        ╮(╯▽╰)╭        ------------------------");
        getLog().info("------------------------------------------------------------------------");
        getLog().info("---------------------     AEGIS CHECKERS START     --------------------------");

        if (!StringUtils.equals(envirment, PRODUCT) && !StringUtils.equals(envirment, PREP)) {
            getLog().info("---------------------  current envirment is not product or prep     --------------------------");
        } else { //只校验正式 和预发环境
            List<Dependency> dependencyList = project.getDependencies();
            List<Dependency> hasSnapDependencyList = new ArrayList<>();
            for (Dependency dependency : dependencyList) {
                if (dependency.getGroupId().contains(YANGT) && dependency.getVersion().contains(SNAPSHOT)) {
                    hasSnapDependencyList.add(dependency);
                }
            }
            if (!hasSnapDependencyList.isEmpty()) {
                getLog().error("---------------------    AEGIS CHECKERS FAILED     --------------------------");
                StringBuilder sb = new StringBuilder();
                for (Dependency dependency : hasSnapDependencyList) {
                    sb.append(dependency.getGroupId() + ":" + dependency.getArtifactId() + ":" + dependency.getVersion() + ";");
                }
                getLog().error("the following dependency version is SNAPSHOT:" + sb.toString());
                throw new MojoFailureException("dependency check fail");
            }
        }
        getLog().info("---------------------     AEGIS CHECKERS END     --------------------------");

    }


最后需要注意的是:如果需要发布到远程nexus,需要使用正式版本。如果使用snapshot,会找不到相应的依赖,实际上本地能下载到jar包,但是maven就报找不到plugin,猜测是处于安全的考虑。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值