maven/plugin开发:插件版本不匹配导致的报错:Method: ‘name’ not found in class in ParameterAnnotationContent

问题描述

今天在写一个maven插件的时候报了错,意思就是插件类参数注释@Parameter中没有name这个方法(org.apache.maven.plugins.annotations.Parameter):

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-plugin-plugin:3.2: descriptor (default-descriptor) on project swift2thrift-maven-plugin: Error extr acting plugin descriptor: ‘Method: ‘name’ not found in class: ‘class org.apache. maven.tools.plugin.annotations.datamodel.ParameterAnnotationContent” -> [Help 1]

我在代码中的确使用了name。下面是我的代码片段

public class Swift2ThriftMojo extends AbstractMojo {
    private static final String SPLIT_REGEX = "\\s;,";
    /**
     * <Swift-class-name...>
     */
    @Parameter(name = "classNames",required=true)
    private List<String>  swiftClasseNames;
    //.....
}

原因分析

这怎么可能?! 如果annotation中没有定义name,我这代码编译都通不过呀。所以一定不是代码的问题。 仔细看看报错位置的错误信息(如下截图),发现maven在解析<packaging>maven-plugin</packaging>时使用的maven-plugin-plugin版本是3.2

而我用的maven-plugin-annotations版本是3.5

<properties>
    <dep.maven-api.version>3.5.0</dep.maven-api.version>
</properties>
<!-- maven -->
<dependency>
    <groupId>org.apache.maven</groupId>
    <artifactId>maven-plugin-api</artifactId>
    <version>${dep.maven-api.version}</version>
</dependency>
<dependency>
    <groupId>org.apache.maven</groupId>
    <artifactId>maven-model</artifactId>
    <version>${dep.maven-api.version}</version>
</dependency>
<dependency>
    <groupId>org.apache.maven</groupId>
    <artifactId>maven-artifact</artifactId>
    <version>${dep.maven-api.version}</version>
</dependency>
<dependency>
    <groupId>org.apache.maven.plugin-tools</groupId>
    <artifactId>maven-plugin-annotations</artifactId>
    <version>3.5</version>
</dependency>

到这里问题就清楚了: maven默认使用的maven-plugin-plugin插件版本过低,无法识别高版本annotation新增加的name方法。

解决方案

方案1

去掉代码中的name定义,把上面的maven插件开发依赖的相关库版本降到3.2.5/3.2。

方案2

指定使用maven-plugin-plugin版本为与maven插件开发依赖的相关库版本匹配的版本,比如3.5 在pom.xml加入如下代码

        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-plugin-plugin</artifactId>
                    <version>3.5</version>
                </plugin>
            </plugins>
        </pluginManagement>

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Java帮帮-微信公众号-技术文章全总结

操作Linux这些命令够用了

操作Linux这些命令够用了 玩过Linux的人都会知道,Linux中的命令的确是非常多,但是玩过Linux的人也从来不会因为Linux的命令如此之多而烦恼,因...

3956
来自专栏信安之路

从暴力枚举用户到获取域所有信息

我们在进行内网渗透中,会遇到存在 windows 域环境的情况,当我们获得一个内网主机权限之后,这个主机可能没有加入域,我们无法直接通过在这个主机上获取域中的相...

710
来自专栏landv

robocopy的用法,数据库局域网备份

1182
来自专栏Laoqi's Linux运维专列

Saltstack 远程操作(grains,pillar)服务安装+配置管理

1867
来自专栏小樱的经验随笔

【经验分享】Hydra(爆破神器)使用方法

这个也是backtrack下面很受欢迎的一个工具 参数详解: -R 根据上一次进度继续破解 -S 使用SSL协议连接 -s 指定端口 -l 指定用户名 -L 指...

4086
来自专栏Seebug漏洞平台

GitLab 任意文件读取漏洞 (CVE-2016-9086) 和任意用户 token 泄露漏洞

Author:dawu,LG(知道创宇404安全实验室) Data:2016-10-09 0x00 漏洞概述 1.漏洞简介 GitLab 是一个利用Ruby o...

3287
来自专栏刘望舒

Gradle入门前奏

在文章为什么现在要用Gradle?中,我们学习了常见的构建工具,以及Gradle与这些构建工具相比有那些不同的特性。这一篇文章我们接着来学习Gradle入门需要...

812
来自专栏北京马哥教育

ansible基础应用

一、运维主要工作 ? ansible聚集以上功能于一身,能够完整轻易的实现应用部署和批量命令功能,适用于主机数量不太多,再大的用puppet。 二、ansib...

3397
来自专栏张戈的专栏

Linux系统zip压缩命令详细参数,附文件排除选项的正确用法

这次给博客添加了纯代码缓存之后,发现缓存文件竟然达到了 50 多 MB!而我的服务器每次还需要同步至七牛,文件体积的增加都会增加文件远程同步备份的时间。因此,我...

2775
来自专栏还债之路

用户相关的文件及命令

Linux system每个文件和进程,都需要对应一个用户和组, Linux system是通过UID和GID来识别用户和组的。用户名相当于人名,UID相当于×...

944

扫码关注云+社区