java - javax.annotation 类和 Java 11 JDK
问题描述
我正在从 Java 8 迁移到 Java 11 并遇到了这个问题。我应该使用:
- maven-compiler-plugin 2.5.1 与目标 1.8(在 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-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>
请帮忙寻找解决办法!!
解决方案
在向上迁移 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>
推荐阅读
- javascript - 如何编写脚本:如果值为 this:xxx 则执行此操作,但如果值为 this:yyyy 则执行此操作
- python-3.x - sklearn AgglomerativeClustering ValueError:预先计算的指标需要形状(n_queries,n_indexed)
- unix-socket - nftables 阻塞本地 unix 套接字
- php - 将用户从用户名匹配到 user_group
- c++ - 如果您有很多节点类型,则访问者模式
- variables - Ansible 主机名和 IP 地址
- javascript - 我不断收到错误“拒绝执行内联事件处理程序,因为它违反了以下内容安全策略指令
- php - laravel 搜索belongsToMany 关系
- apache-kafka - KeyValueStore.get() 返回不一致的结果
- javascript - 如何添加功能以确保特定用户已经失聪