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 条评论
登录 后参与评论

相关文章

来自专栏web

webstorm常用功能快捷方式

1553
来自专栏Java架构沉思录

Node.js 三大特点你都懂了吗

在Java、PHP或者.net等服务器端语言中,会为每一个客户端连接创建一个新的线程。而每个线程需要耗费大约2MB内存。也就是说,理论上,一个8GB内存的服务器...

693
来自专栏阮一峰的网络日志

Javascript文件加载:LABjs和RequireJS

传统上,加载Javascript文件都是使用<script>标签。 就像下面这样:   <script type="text/javascript" src=...

3444
来自专栏守望轩

Visual Studio 2008 每日提示(二十六)

#251、在文件中保存扩展名的映射 原文链接:You can save your file extension mappings to a file 操作步骤...

3474
来自专栏coding

vue.js路由传参

901
来自专栏前端大白专栏

angular2中在使用路由懒加载时候出现的错误

1524
来自专栏林德熙的博客

win10 uwp App-to-app communication 应用通信 发送数据文件启动

这篇文章都是乱说的,如果觉得有不好的,可以发我邮箱 本文主要讲如何让两个应用之间传输消息,也就是我们经常用的分享。我们可以使用的有剪辑版、UWP分享、Uri启动...

731
来自专栏木子昭的博客

webpack手动配置React开发环境

1483
来自专栏Coding+

HTTP 的基础概念

HTTP (Hypertext Transfer Protocol) 即超文本传输协议,和 HTML (Hypertext Markup Language) 超...

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

错误集锦1-HttpServlet was not found on the Java Build Path。

我们在用Eclipse进行Java web开发时,可能会出现这样的错误:The superclass javax.servlet.http.HttpServle...

3127

扫码关注云+社区