javax.annotation 类和 Java 11 JDK

新手上路,请多包涵

我正在从 Java 8 迁移到 Java 11 并遇到了问题。我应该使用:

  • 带有目标 1.8 的 maven-compiler-plugin 2.5.1(在 java8 中编译 WAR)
  • 猫9
  • 打开 JDK 11

但是在启动时不断出现错误:

合并 bean 定义的后处理失败;嵌套异常是 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>

请帮助找到解决方案!

原文由 Sviatlana 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.4k
2 个回答

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

合并 bean 定义的后处理失败;嵌套异常是 java.lang.NoSuchMethodError: javax.annotation.Resource.lookup()Ljava/lang/String;

解决:使用 maven exclusion 摆脱其中一个库。

原文由 Sviatlana 发布,翻译遵循 CC BY-SA 4.0 许可协议

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

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>

原文由 Mikhail Kholodkov 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题