问题描述
我正在从Java 8迁移到Java 11,遇到了这个问题。 我应该使用:
- 带有目标1.8的maven-编译器-plugin 2.5.1(在java8中编译WAR)
- Tomcat9
- 打开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-编译器-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>
请帮助寻找解决方案!!
推荐答案
对我来说,问题在于libs:javax.Annotation-api^1.3.2和jsr250-api:1.0之间的冲突。在没有lookup()方法的jsr250-api中有一个javax.注解.@Resource注解!在一些运行环境中,jsr250的@Resorse首先被加载,而在另一些运行环境中
合并Bean定义的后处理失败;嵌套异常为 Java.lang.NoSuchMethodError: Javax.annotation.Resource.lookup()Ljava/lang/String;
解决方案:使用maven exclusion删除其中一个库。