我正在从Java 8迁移到Java 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>
请帮助找到解决方案!
答案 0 :(得分:3)
在迁移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>
答案 1 :(得分:2)
我有同样的问题。
我成功添加了以下几行:
<build>
...
<extensions>
<!-- Prevents this error, with JDK 13: -->
<!-- NoSuchMethodError: 'java.lang.String javax.annotation.Resource.lookup()' -->
<extension>
<groupId>javax.annotation</groupId>
<artifactId>javax.annotation-api</artifactId>
<version>1.3.2</version>
</extension>
<extension>
<groupId>javax.annotation</groupId>
<artifactId>jsr250-api</artifactId>
<version>1.0</version>
</extension>
</extensions>
</build>
答案 2 :(得分:1)
我在使用JDK11的项目中遇到了同样的问题。
我的解决方案:
@Autowired
@Qualifier("bean's name")
代替:
@Resourse
答案 3 :(得分:0)
对我来说,问题出在库之间冲突:javax.annotations-api ^ 1.3.2和jsr250-api:1.0。 jsr250-api中有一个javax.annotation。@ Resource注释,没有lookup()方法!在某些运行环境中,jsr250的@Resorse首先被加载,而在其他环境中-javax.annotations-api则被加载。在第一种情况下,我的错误发生了:
合并bean定义的后处理失败;嵌套异常为 java.lang.NoSuchMethodError: javax.annotation.Resource.lookup()Ljava / lang / String;
解决:使用Maven排除方法摆脱一个库。