javax.annotation 类 和 Java 11 JDK
javax.annotation classes and Java 11 JDK
我正在从 Java 8 迁移到 Java 11 并遇到了问题。
我应该使用:
- maven-compiler-plugin 2.5.1 with target 1.8(在java8中编译WAR)
- tomcat9
- 打开JDK11
但是在启动时不断出现错误:
Post-processing of merged bean definition failed; 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>
请大家帮忙解决!!
提前迁移 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>
对我来说,问题在于库之间的冲突:javax.annotations-api^1.3.2 和 jsr250-api:1.0。 jsr250-api WITHOUT lookup() 方法中有一个 javax.annotation.@Resource 注解!在某些 运行 环境中,首先加载 jsr250 的 @Resorse,在其他环境中 - javax.annotations-api。在第一种情况下,我的错误发生了:
Post-processing of merged bean definition failed; nested exception is
java.lang.NoSuchMethodError:
javax.annotation.Resource.lookup()Ljava/lang/String;
解决:使用 maven 排除删除其中一个库。
我遇到了同样的问题。
我成功地添加了这些行:
<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>
我在使用 JDK11 的项目中遇到了同样的问题。
我的解决方案:
@Autowired
@Qualifier("bean's name")
而不是:
@Resourse
我正在从 jdk 8 迁移到 jdk 13。我遇到了类似的问题。但事情是因为 jdk 11 封装的 javax 被弃用并替换为 jakarta 库。我正在使用 maven 3.8.4 和 jdk 13.
<dependency>
<groupId>jakarta.annotation</groupId>
<artifactId>jakarta.annotation-api</artifactId>
<version>1.3.5</version>
</dependency>
<dependency>
<groupId>jakarta.xml.bind</groupId>
<artifactId>jakarta.xml.bind-api</artifactId>
<version>2.3.2</version>
</dependency>
我正在从 Java 8 迁移到 Java 11 并遇到了问题。 我应该使用:
- maven-compiler-plugin 2.5.1 with target 1.8(在java8中编译WAR)
- tomcat9
- 打开JDK11
但是在启动时不断出现错误:
Post-processing of merged bean definition failed; 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>
请大家帮忙解决!!
提前迁移 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>
对我来说,问题在于库之间的冲突:javax.annotations-api^1.3.2 和 jsr250-api:1.0。 jsr250-api WITHOUT lookup() 方法中有一个 javax.annotation.@Resource 注解!在某些 运行 环境中,首先加载 jsr250 的 @Resorse,在其他环境中 - javax.annotations-api。在第一种情况下,我的错误发生了:
Post-processing of merged bean definition failed; nested exception is java.lang.NoSuchMethodError: javax.annotation.Resource.lookup()Ljava/lang/String;
解决:使用 maven 排除删除其中一个库。
我遇到了同样的问题。
我成功地添加了这些行:
<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>
我在使用 JDK11 的项目中遇到了同样的问题。
我的解决方案:
@Autowired
@Qualifier("bean's name")
而不是:
@Resourse
我正在从 jdk 8 迁移到 jdk 13。我遇到了类似的问题。但事情是因为 jdk 11 封装的 javax 被弃用并替换为 jakarta 库。我正在使用 maven 3.8.4 和 jdk 13.
<dependency>
<groupId>jakarta.annotation</groupId>
<artifactId>jakarta.annotation-api</artifactId>
<version>1.3.5</version>
</dependency>
<dependency>
<groupId>jakarta.xml.bind</groupId>
<artifactId>jakarta.xml.bind-api</artifactId>
<version>2.3.2</version>
</dependency>