JDK 17 是继 JDK 8 后的首个 LTS 版本,越来越多的第三方依赖包只支持JDK17,所以使用JDK17作为开发环境势在必行。
直接影响
Java EE 移交 Eclipse 基金会后更名为 Jakarta EE,包名从 javax.* 改为 jakarta.*。
仅此一项就要改动大量代码。
核心框架版本升级
| 名称 | 旧版本号 | 新版本号 |
|---|
| spring-boot | 2.3.12.RELEASE | 3.3.9 |
| spring-cloud | 2.2.9.RELEASE | 2023.0.1.2 |
spring-cloud不要使用2023.0.3.2版本,会出现一些意想不到的错误。
工具库升级
| 名称 | 旧版本号 | 新版本号 | 说明 |
|---|
| commons-lang3 | 3.10 | 3.17.0 | Apache Commons 工具库兼容 JDK17 |
| commons-io | 2.2 | 2.18.0 | 修复安全漏洞并兼容新 JDK |
| commons-codec | 1.11 | 1.18.0 | 支持新哈希算法 |
| hutool-all | 5.8.25 | 5.8.35 | 轻微升级,修复已知问题 |
日志组件升级
| 名称 | 旧版本号 | 新版本号 | 说明 |
|---|
| logback-classic | 1.2.3 | 1.5.16 | Logback 1.3+ 需 JDK 11+,兼容 JDK17 |
| log4j-to-slf4j | 2.13.3 | 2.24.3 | 修复 Log4j2 高危漏洞(如CVE-2021-44832) |
| jul-to-slf4j | 1.7.30 | 2.0.17 | SLF4J 2.x 适配 JDK17 |
数据与持久化层升级
- 数据库驱动
| 名称 | 旧版本号 | 新版本号 | 说明 |
|---|
| mysql-connector-java | 8.0.30 | 9.2.0 | 官方支持 JDK 17 |
| com.oracle.ojdbc6 | 11.2.0.3 | com.oracle.database.jdbc:ojdbc11:23.7.0.25.01 | 替换为 OracleJDBC 11+,支持 JDK 17 |
| com.dameng.DmJdbcDriver18 | 8.1.3.140 | 8.1.3.141 | 达梦官方最新驱动,确认 JDK 17 兼容性 |
- 连接池
| 名称 | 旧版本号 | 新版本号 | 说明 |
|---|
| com.alibaba.druid | 1.2.22 | 1.2.24 | 修复 JDK 17 兼容性问题 |
| commons-pool2 | 2.8.1 | 2.12.1 | 支持新特性 |
- MyBatis
| 名称 | 旧版本号 | 新版本号 | 说明 |
|---|
| mybatis-spring-boot-starter | 2.1.0 | 3.0.4 | 适配 Spring Boot3.x |
| mybatis-generator-core | 1.3.3 | 1.4.2 | 修复生成器兼容性 |
| mapper-spring-boot-starter | 1.2.4 | 5.0.1 | MyBatis 通用 Mapper 最新版 |
JSON 与序列化
| 名称 | 旧版本号 | 新版本号 | 说明 |
|---|
| fastjson | 1.2.83 | 弃用→改用com.alibaba.fastjson2:2.0.56 | FastJSON 1.x 存在安全漏洞且 JDK17 兼容性差 |
| truelicense-core | 1.33 | 4.0.0 | TrueLicense 4.x 支持 JDK17 |
XML 与 JAXB
| 名称 | 旧版本号 | 新版本号 | 说明 |
|---|
| jaxb-api | 2.3.1 | 弃用→改用jakarta.xml.bind-api:4.0.2 | JDK 17 移除了 JAXB,需显式依赖 |
| jaxb-impl | 2.3.1 | 4.0.5 | JAXB 运行时实现 |
| jaxb-runtime | 2.3.1 | 4.0.5 | 替代旧版 JAXB |
| javax.activation | 1.1.1 | 弃用→改用jakarta.activation.activation-api:2.1.3和jakarta.persistence.persistence-api:3.2.0 | Jakarta Activation 2.x |
网络与协议
| 名称 | 旧版本号 | 新版本号 | 说明 |
|---|
| io.netty | 4.1.99.Final | 4.1.119.Final | Netty 4.1.100+ 支持 JDK17 |
| netty-codec-http | 4.1.65.Final | 4.1.119.Final | 与 Netty 主版本同步 |
其他关键依赖
| 名称 | 旧版本号 | 新版本号 | 说明 |
|---|
| oshi-core | 6.3.2 | 6.7.0 | 支持新硬件信息获取 |
| bcprov-jdk18on | 1.77 | 1.80 | 支持 JDK 17 |
| lombok-mapstruct-binding | 0.2.0 | 0.2.0 | 若与 Lombok 1.18.30+ 配合使用无需升级 |
| mapstruct | 1.5.5.Final | 1.6.3 | 兼容 JDK 17 |
升级步骤建议
- 环境准备:
- 安装 JDK 17 并配置环境变量。
- 更新 IDE 的编译目标和语言级别为JDK 17。
- 依赖升级:
- 按上述表格逐步升级依赖版本。
- 优先升级 SpringBoot、Spring Cloud 和日志组件。
- 代码适配:
- 替换
javax 为 jakarta 包名。 - 修复因依赖升级导致的API 变更(如 MyBatis、Jackson)。
- 测试与验证:
- 运行单元测试和集成测试。
- 使用
-XX:+ShowCodeDetailsInExceptionMessages 调试启动错误。