内容提要
OpenJDK 21发布后,D瓜哥建议整体升级项目依赖,特别是Lombok和Netty。注意JDK 21移除了Java EE模块,需要引用相关Jar包。为解决编译和运行中的错误,需添加特定依赖和启动参数。使用Maven的profile机制可实现无痛升级,确保项目在不同JDK版本间平稳切换。
关键要点
-
OpenJDK 21 发布后,建议整体升级项目依赖,特别是 Lombok 和 Netty。
-
JDK 21 移除了 Java EE 模块,需要引用相关 Jar 包。
-
使用 Maven 的 profile 机制可以实现无痛升级,确保项目在不同 JDK 版本间平稳切换。
-
Lombok 需升级到 v1.18.30+,低于此版本会报错。
-
Netty 建议升级到 4.1.93.Final+,以兼容 JDK 21 的 DirectByteBuffer 改动。
-
编译时可能会遇到 javax.annotation.Resource 找不到的问题,需要添加相关依赖。
-
Nashorn JavaScript 引擎在 JDK 11 被移除,需添加 nashorn-core 依赖以解决相关错误。
-
Bean Validation 升级到 jakarta.validation-api 3.0.2 及 hibernate-validator 7.0.5.Final 以解决初始化错误。
-
JAXB 相关内容在 JDK 11 被移除,需添加 jaxb-runtime 依赖。
-
Java 模块化引入了更严格的封装性,可能导致访问错误,需要使用 --add-opens 参数解决。
-
Maven 构建和测试时可能遇到模块化问题,可以通过配置 maven-compiler-plugin 和 maven-surefire-plugin 解决。
-
使用 Maven 的 profile 机制可以根据 JDK 版本自动激活不同的配置,实现无感升级。
-
阿里巴巴开发的 Migration Toolkit for Java 可用于检查 JDK 升级中的问题。
-
升级后,Java 启动参数可能需要重新配置,需关注生产环境中的启动参数。
延伸问答
升级到 OpenJDK 21 时需要注意哪些依赖的版本?
Lombok 需升级到 v1.18.30+,Netty 建议升级到 4.1.93.Final+,Bean Validation 升级到 jakarta.validation-api 3.0.2 及 hibernate-validator 7.0.5.Final。
如何解决编译时找不到 javax.annotation.Resource 的问题?
需要添加相关的 Jar 包依赖,如 jakarta.annotation-api 或 javax.annotation-api。
OpenJDK 21 移除了哪些模块?
OpenJDK 21 移除了 Java EE 模块,因此需要引用相关的 Jar 包。
如何使用 Maven 的 profile 机制实现无痛升级?
可以根据 JDK 版本自动激活不同的配置,确保项目在不同 JDK 版本间平稳切换。
在 JDK 21 中,如何处理 Java 模块化带来的访问错误?
可以使用 --add-opens 参数来解决访问错误,确保模块对外开放。
升级到 OpenJDK 21 后,如何检查项目中的潜在问题?
可以使用阿里巴巴开发的 Migration Toolkit for Java 来检查 JDK 升级中的问题。