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

相关文章

来自专栏向治洪

在Windows下搭建React Native Android开发环境

安装JDK 从Java官网下载JDK并安装。请注意选择x86还是x64版本。 推荐将JDK的bin目录加入系统PATH环境变量。 安装Android S...

2206
来自专栏debugeeker的专栏

《coredump问题原理探究》windows版7.1节vector

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xuzhina/article/detai...

662
来自专栏从零开始学自动化测试

Fiddler抓包1-抓firefox上https请求

前言 fiddler是一个很好的抓包工具,默认是抓http请求的,对于pc上的https请求,会提示网页不安全,这时候需要在浏览器上安装证书。 一、网页不安全 ...

3435
来自专栏Python小屋

PAGE:像Visual Studio一样设计Python GUI窗体

虽然使用标准库tkinter开发Python GUI程序很方便,也提供了强大的功能,但是窗体上的一切都需要程序员使用代码来控制,在页面布局上浪费大量时间,确实不...

3084
来自专栏好好学java的技术栈

Hexo+github搭建个人博客环境配置和发布(图文详解)

上一篇博文 《Hexo+github搭建个人博客-环境搭建篇》 中,我们讲解了利用Hexo搭建个人博客应该要配置哪些环境。 相信大家已经迫不及待的想要知道接下来...

852
来自专栏主机笔记

安装chevereto程序搭建自己的图片分享站点

几台服务器闲置着,一直想着自建一个图床,趁着这次chevereto黑五50%优惠买了付费版,今天就在服务器上安装chevereto这个图床系统 cheveret...

3405
来自专栏上善若水

013android初级篇之Android Studio 引用源码模块,jar及so文件

013android初级篇之Android Studio 引用源码模块,jar及so文件

472
来自专栏java系列博客

Windows下安装并设置Redis

1323
来自专栏分享达人秀

配置SDK Manager,迎接下一步

SDK Manager.exe 是ADT Bundle根目录下的一个SDK 管理程序,该程序主要负责下载、更新、删除与sdk 相关的文件。 由于...

2305
来自专栏老马寒门IT

Node入门教程(4)第三章:第一个 Nodejs 程序

第一个 Nodejs 程序 本教程仅适合您已经有一定的JS编程的基础或者是后端语言开发的基础。 如果您是零基础,建议您先学一下老马的前端免费视频教程 第一步:创...

2676

扫码关注云+社区