javax.annotation classes 和 Java 11 JDK

2022-09-01 15:47:31

我正在从Java 8迁移到Java 11并面临这个问题。我应该使用:

  • maven-compiler-plugin 2.5.1,目标为1.8(在java8中编译WAR)
  • 雄猫9
  • 打开 JDK 11

但是在启动时得到不断的错误:

合并的Bean定义的后处理失败;nested exception is java.lang.NoSuchMethodError: javax.annotation.Resource.lookup()Ljava/lang/String;

我找到了多种方法来修复它。已尝试添加依赖项:

        <dependency>
            <groupId>javax.annotation</groupId>
            <artifactId>javax.annotation-api</artifactId>
            <version>1.3.2</version>
        </dependency>

已尝试添加扩展:

   <extensions>
        <extension>
            <groupId>javax.annotation</groupId>
            <artifactId>javax.annotation-api</artifactId>
            <version>1.3.2</version>
        </extension>
    </extensions>

这些都无济于事。

这是 maven-compiler-plugin 配置:

    <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>2.5.1</version>
        <configuration>
            <source>1.8</source>
            <target>1.8</target>
            <encoding>UTF-8</encoding>
        </configuration>
    </plugin>

请帮助找到解决方案!!


答案 1

在 Java 的 3 个版本之前迁移时,首先应该考虑的是更新所有主要依赖项。

maven-compiler-plugin-> 当前版本是 ,3.8.1

2.5.1是7岁。

请尝试以下操作来解决此错误:

java.lang.NoSuchMethodError: javax.annotation.Resource.lookup()Ljava/lang/String;

保留依赖关系:

<dependency>
    <groupId>javax.annotation</groupId>
    <artifactId>javax.annotation-api</artifactId>
    <version>1.3.1</version>
</dependency>

并将其显式添加为模块:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.8.1</version>
    <configuration>
        <release>11</release>
        <compilerArgs>
            <arg>--add-modules</arg>
            <arg>java.xml.ws.annotation</arg>
        </compilerArgs>
    </configuration>
</plugin>

答案 2

对我来说,问题在于libs之间的冲突:javax.annotations-api^1.3.2和jsr250-api:1.0。在 jsr250-api 中没有 lookup() 方法中有一个javax.annotation.@Resource注释!在一些运行环境中,jsr250的@Resorse首先加载,在其他环境中 - javax.annotations-api。在第一种情况下,我的错误发生了:

合并的Bean定义的后处理失败;nested exception is java.lang.NoSuchMethodError: javax.annotation.Resource.lookup()Ljava/lang/String;

解决方法:使用 maven 排除来摆脱一个库。


推荐