
























最后更新:2026-06-26
适用场景:Spring Boot 项目选择 JDK、Spring Boot 2 升级 3、Spring Boot 3 升级 4、Java 版本不兼容、Maven / Gradle 构建失败
创建或接手 Spring Boot 项目时,经常会遇到这些问题:
Spring Boot 2 应该用 JDK8、JDK11 还是 JDK17?
Spring Boot 3 为什么不能使用 JDK8?
Spring Boot 4 应该选择 JDK21 还是 JDK25?
Spring Boot 支持 JDK26 吗?
项目明明能编译,启动时为什么报 major version 错误?
升级 JDK 后 Maven、Gradle 或第三方依赖为什么又报错?
很多文章会简单写成:
Spring Boot 2 = JDK8
Spring Boot 3 = JDK17
Spring Boot 4 = JDK21
这种说法不够准确。
**Spring Boot 的 Java 兼容范围不仅取决于大版本,也取决于具体的次版本和维护版本。**例如 Spring Boot 2.5.15 官方兼容到 Java 18,2.6.15 兼容到 Java 19,而 2.7.18 已兼容到 Java 21。Spring Boot 3.x 虽然统一要求至少 Java 17,但不同分支支持的 Java 上限也不完全相同。(Home)
本文将整理:
Spring Boot 2.x / 3.x / 4.x 与 JDK 兼容关系
不同项目应该选择哪个 JDK
Spring Boot 对 Maven 和 Gradle 的版本要求
Spring Boot 2 升级 3 的主要变化
Spring Boot 3 升级 4 的主要变化
常见版本不兼容报错及排查方法
如果你还没有安装 JDK,可以先查看:
各版本JDK镜像下载地址:JDK8 / 11 / 17 / 21 / 25 / 26
Windows安装JDK与JAVA_HOME环境变量配置教程
下面是偏向实际项目落地的建议:
| 项目情况 | Spring Boot版本 | 建议JDK | 说明 |
|---|---|---|---|
| 无法升级的老项目 | 2.x | 按现有环境使用 JDK8 / 11 / 17 | 不要只为追新而单独升级 JDK |
| Spring Boot 2.7 老项目 | 2.7.18 | JDK11 或 JDK17 | 兼顾兼容性和较新的运行环境 |
| 当前主流项目 | 3.x | JDK17 或 JDK21 | JDK17 最保守,JDK21 更适合新项目 |
| Spring Boot 3.5 新项目 | 3.5.x | 优先 JDK21,可评估 JDK25 | 3.5.15 官方兼容至 Java 25 |
| Spring Boot 4 新项目 | 4.x | JDK21 或 JDK25 | JDK25 是当前最新 LTS |
| 新版本兼容测试 | 4.x | JDK26 | 适合技术验证,生产使用前应完整测试 |
截至 2026 年 6 月,Oracle 将 JDK 26 标为最新 Java SE 版本,JDK 25 是最新 LTS,JDK 21 是上一个 LTS。Spring Boot 4.0.7 和 4.1.0 官方兼容 Java 17 至 Java 26;Spring Boot 3.5.15 官方兼容 Java 17 至 Java 25。(Oracle)
我的实际建议是:
老项目:不要盲目升级,先保持现有可运行版本
Spring Boot 3 新项目:优先 JDK21
追求最大兼容性:使用 JDK17
Spring Boot 4 新项目:优先评估 JDK25
JDK26:先用于测试和兼容性验证
下面列出几个常见维护版本的官方兼容范围。
| Spring Boot版本 | 最低Java版本 | 官方兼容上限 | 推荐使用场景 |
|---|---|---|---|
| 2.5.15 | Java 8 | Java 18 | 历史老项目 |
| 2.6.15 | Java 8 | Java 19 | 存量项目 |
| 2.7.18 | Java 8 | Java 21 | Spring Boot 2.x 后期项目 |
| 3.0.13 | Java 17 | Java 21 | 早期 Spring Boot 3 项目 |
| 3.1.12 | Java 17 | Java 21 | 存量 Spring Boot 3 项目 |
| 3.2.12 | Java 17 | Java 23 | Spring Boot 3.2 项目 |
| 3.3.13 | Java 17 | Java 23 | 仍在使用的 3.3 项目 |
| 3.4.13 | Java 17 | Java 24 | 仍在使用的 3.4 项目 |
| 3.5.15 | Java 17 | Java 25 | 当前主流 3.x 分支之一 |
| 4.0.7 | Java 17 | Java 26 | Spring Boot 4.0 项目 |
| 4.1.0 | Java 17 | Java 26 | 当前最新稳定主线 |
数据来自对应版本的 Spring Boot 官方系统要求。当前官方文档导航列出的稳定版本包括 Spring Boot 4.1.0、4.0.7、3.5.15、3.4.13 和 3.3.13。(Home)
注意:表中的“官方兼容上限”不代表你项目中的所有第三方 Starter、数据库驱动、字节码工具和中间件客户端都一定兼容。Spring Boot 官方也提醒,第三方项目可能有额外或更高的运行要求。(Home)
例如都叫 Spring Boot 3.x:
Spring Boot 3.0.13 兼容到 Java 21
Spring Boot 3.2.12 兼容到 Java 23
Spring Boot 3.4.13 兼容到 Java 24
Spring Boot 3.5.15 兼容到 Java 25
所以不能简单得出:
Spring Boot 3 支持所有 Java 17 以上版本
正确判断方式应该是:
Spring Boot具体版本
+
JDK具体版本
+
Maven或Gradle版本
+
第三方依赖兼容性
比如一个 Spring Boot 3.0 项目直接切换到 JDK25,即使 Spring Boot 3.x 的较新分支已经支持 JDK25,旧的 3.0 分支、Gradle Wrapper、Lombok、ASM、Byte Buddy、Jacoco 等依赖仍可能无法识别新版本字节码。
Spring Boot 2.x 的版本跨度很大,不能把所有 2.x 项目都视为相同环境。
官方兼容范围示例:
Spring Boot 2.5.15:Java 8 ~ Java 18
Spring Boot 2.6.15:Java 8 ~ Java 19
Spring Boot 2.7.18:Java 8 ~ Java 21
(Home)
如果项目满足下面情况:
长期稳定运行
依赖很多历史组件
使用旧版中间件或数据库驱动
暂时没有升级计划
只能运行在旧服务器环境
可以暂时保留 JDK8,但不要把“还能运行”等同于“无需维护”。
需要重点关注:
JDK安全更新
第三方依赖漏洞
Spring Boot具体维护版本
数据库驱动版本
TLS和证书兼容问题
可以。Spring Boot 2.7.18 官方要求最低 Java 8,并兼容到 Java 21,因此 Java 17 在其官方兼容范围内。(Home)
对于仍需维护的 Spring Boot 2.7 项目,我更建议:
保守选择:JDK11
较新环境:JDK17
准备迁移Spring Boot 3:先升级到JDK17
Spring Boot 2.7.18 官方兼容到 Java 21。(Home)
但实际升级前仍要检查:
Lombok版本
Maven和Gradle版本
测试插件
Jacoco
ASM
Byte Buddy
数据库驱动
公司内部SDK
官方兼容 Spring Boot 本身,并不等于你的整个依赖树都已经验证通过。
Spring Boot 3.0 开始,最低要求从 Java 8 提升到了 Java 17,并基于 Spring Framework 6。Spring Boot 3.0 迁移指南也明确说明,Java 8 不再受支持。(Home)
所以以下组合不能正常使用:
Spring Boot 3 + JDK8
Spring Boot 3 + JDK11
至少需要:
Spring Boot 3 + JDK17
我的建议:
维护历史项目:JDK17
当前新项目:JDK21
需要新LTS验证:Spring Boot 3.5 + JDK25
原因是:
JDK17是Spring Boot 3最低基线,兼容性最保守
JDK21是成熟LTS,适合大多数新项目
JDK25是最新LTS,但需要更高版本Spring Boot和依赖验证
Spring Boot 3.5.15 官方兼容 Java 17 至 Java 25,因此 Spring Boot 3.5 项目可以评估 JDK25。(Home)
不能一概而论。
当前官方文档显示:
Spring Boot 3.5.15:兼容到 Java 25
Spring Boot 4.0.7:兼容到 Java 26
Spring Boot 4.1.0:兼容到 Java 26
因此,如果明确需要使用 JDK26,Spring Boot 4.x 是官方兼容范围更清晰的选择。(Home)
Spring Boot 4.0.7 和 4.1.0 都要求至少 Java 17,并兼容到 Java 26。Spring Boot 4 基于 Spring Framework 7、Jakarta EE 11 和 Servlet 6.1。官方迁移指南建议使用最新的 Java LTS。(Home)
截至当前:
JDK25:最新LTS
JDK21:上一个LTS
JDK26:最新Java SE版本
(Oracle)
因此我的建议是:
Spring Boot 4 + JDK21
适合:
第三方依赖较多
公司基础设施暂未升级
希望降低迁移风险
需要先验证Spring Boot 4本身
Spring Boot 4 + JDK25
适合:
新项目
长期维护项目
团队愿意完整测试依赖
希望使用最新LTS
Spring Boot 4 + JDK26
适合:
测试环境
框架兼容验证
Java新特性体验
非关键生产服务试点
生产环境不要只看 Spring Boot 官方兼容范围,还要验证应用监控、APM、数据库驱动、序列化组件和部署平台。
JDK 版本正确,不代表 Maven 或 Gradle 一定正确。
| Spring Boot版本 | Maven要求 | Gradle要求 |
|---|---|---|
| 2.7.18 | 3.5+ | 6.8.x、6.9.x、7.x、8.x |
| 3.0.13 | 3.5+ | 7.5+ 或 8.x |
| 3.1.12 | 3.6.3+ | 7.5+ 或 8.x |
| 3.2.12 | 3.6.3+ | 7.5+ 或 8.x |
| 3.3.13 | 3.6.3+ | 7.5+ 或 8.x |
| 3.4.13 | 3.6.3+ | 7.6.4+ 或 8.4+ |
| 3.5.15 | 3.6.3+ | 7.6.4+ 或 8.4+ |
| 4.0.7 / 4.1.0 | 3.6.3+ | 8.14+ 或 9.x |
(Home)
需要注意,Spring Boot 支持某个 Gradle 版本,不代表该 Gradle 版本能运行在任意 JDK 上。
例如 Gradle 官方兼容表显示:
运行在Java 21上,至少需要Gradle 8.5
运行在Java 24上,至少需要Gradle 8.14
运行在Java 25上,至少需要Gradle 9.1
运行在Java 26上,至少需要Gradle 9.4
这也是为什么升级 JDK 后,Gradle 项目可能先报错,而不是 Spring Boot 本身报错。
java -version
javac -version
mvn -version
重点看:
Java version
Java home
Linux / macOS:
./gradlew --version
Windows:
gradlew.bat --version
重点看:
Gradle
Launcher JVM
Daemon JVM
Maven 项目一般在 pom.xml 中:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.5.15</version>
</parent>
Gradle 项目一般在 build.gradle:
plugins {
id 'org.springframework.boot' version '3.5.15'
}
也可以从启动日志中查看:
:: Spring Boot :: (v3.5.15)
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.18</version>
</parent>
<properties>
<java.version>17</java.version>
</properties>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.5.15</version>
</parent>
<properties>
<java.version>21</java.version>
</properties>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>4.1.0</version>
</parent>
<properties>
<java.version>25</java.version>
</properties>
Spring Boot 会管理一组经过协调的依赖版本,官方建议不要自行覆盖 Spring Framework 等核心依赖版本,除非确实了解兼容影响。(Home)
建议使用 Java Toolchain。
java {
toolchain {
languageVersion = JavaLanguageVersion.of(21)
}
}
java {
toolchain {
languageVersion = JavaLanguageVersion.of(21)
}
}
注意区分:
Gradle运行使用的JDK
项目编译使用的Toolchain JDK
IDEA中的Gradle JVM
项目中的Project SDK
这些配置可以不完全相同,但普通项目最好尽量统一,避免出现“IDEA 能运行,命令行不能运行”的情况。
Gradle 镜像和 Wrapper 配置可以查看:
Gradle国内镜像配置教程:init.gradle、repositories与Wrapper加速
Spring Boot 官方迁移指南建议,升级到 Spring Boot 3 之前,先将项目升级到最新的 2.7.x,再处理 Spring Boot 3 的迁移。Spring Boot 3 要求 Java 17、Spring Framework 6,并升级到了 Jakarta EE 10 相关规范。(GitHub)
重点检查:
JDK升级到17或更高
Spring Boot先升级到2.7.x
Spring Security版本
Spring Cloud版本
数据库驱动
第三方Starter
配置属性变更
废弃API
javax迁移到jakarta
Spring Boot 2 项目常见:
import javax.servlet.http.HttpServletRequest;
import javax.persistence.Entity;
import javax.validation.Valid;
Spring Boot 3 中通常需要改为:
import jakarta.servlet.http.HttpServletRequest;
import jakarta.persistence.Entity;
import jakarta.validation.Valid;
Spring Boot 3.0 使用 Jakarta EE 10 相关规范,例如 Servlet 6.0 和 JPA 3.1。(GitHub)
不要只在 IDE 中批量替换包名,还要升级对应依赖。
Spring Boot 4 要求至少 Java 17,并基于 Spring Framework 7、Jakarta EE 11 和 Servlet 6.1。官方迁移指南鼓励使用最新 Java LTS;如果使用 GraalVM Native Image,则要求 GraalVM 25 或更高版本。(GitHub)
升级前重点检查:
Spring Framework 7兼容性
Spring Security版本
Spring Cloud版本映射
Jakarta EE 11相关变化
Servlet容器版本
自定义Starter
自动配置类
配置属性变更
测试框架
GraalVM版本
Gradle Wrapper版本
Spring Boot 4 的升级不应该只修改:
<version>4.1.0</version>
而应该先检查整个依赖生态。
error: invalid source release: 17
通常表示:
项目要求Java 17编译
但Maven或IDEA实际使用的JDK低于17
检查:
java -version
javac -version
mvn -version
Unsupported class file major version
通常表示:
当前运行或构建工具不能识别更高版本JDK生成的class文件
可以查看:
Java版本号与class文件major version对照表
No compiler is provided in this environment.
Perhaps you are running on a JRE rather than a JDK?
通常表示 Maven 没有使用完整 JDK。
可以查看:
No compiler is provided in this environment解决办法
升级 Spring Boot 3 后出现:
package javax.servlet does not exist
package javax.persistence does not exist
通常是因为项目仍在使用旧的 javax 包名,需要迁移到对应的 jakarta 包,并升级相关依赖。
例如:
Unsupported Java
Could not open cp_settings generic class cache
Unsupported class file major version
可能不是 Spring Boot 不支持,而是 Gradle Wrapper 太旧。
执行:
./gradlew --version
然后对照 Gradle 与 Java 兼容矩阵。(Gradle用户手册)
IntelliJ IDEA 中至少检查:
Project SDK
Module SDK
Maven Runner JRE
Gradle JVM
Run Configuration JRE
建议:
Project SDK = 项目JDK
Module SDK = Project SDK
Maven Runner JRE = Project JDK
Gradle JVM = 项目兼容的JDK
Run Configuration JRE = Project SDK
IDEA 详细配置可以查看:
升级 Spring Boot 或 JDK 前,建议按下面顺序检查:
1. 确认当前Spring Boot具体版本
2. 查看该版本官方Java兼容范围
3. 确认目标JDK是否为LTS
4. 检查Maven或Gradle版本
5. 检查Gradle Wrapper能否运行在目标JDK
6. 检查Spring Cloud版本映射
7. 检查数据库驱动
8. 检查Lombok、ASM、Byte Buddy、Jacoco
9. 检查公司内部Starter和SDK
10. 检查javax到jakarta迁移
11. 在测试环境运行完整自动化测试
12. 检查Docker和CI/CD中的JDK
13. 检查生产服务器实际java -version
14. 准备回滚方案
不要只在开发电脑上运行成功,就直接认为生产环境一定兼容。
Spring Boot:按现有版本
JDK:按现有验证版本
建议:先升级依赖补丁,再规划大版本迁移
Spring Boot:2.7.18
JDK:11或17
建议:为升级Spring Boot 3做准备
Spring Boot:3.5.x
JDK:21
Maven:3.6.3+
Gradle:按项目实际选择受支持版本
Spring Boot:4.1.x
JDK:25
建议:提前验证第三方Starter、Spring Cloud和监控组件
Spring Boot:4.1.x
JDK:26
建议:用于测试和新特性验证,不要未经测试直接替换生产环境
不是。
例如 Spring Boot 2.7.18 最低支持 Java 8,并兼容到 Java 21。具体可使用范围取决于 Spring Boot 的具体维护版本。(Home)
不可以。Spring Boot 3.0 开始最低要求 Java 17。(Home)
都可以。
我的建议:
老项目或保守环境:JDK17
新项目:JDK21
Spring Boot 3.5并愿意充分测试:可评估JDK25
不是。
Spring Boot 4.0.7 和 4.1.0 最低仍是 Java 17,并兼容到 Java 26。JDK25 是当前最新 LTS,因此更适合长期新项目,但不是强制要求。(Home)
要看具体分支。
Spring Boot 3.5.15 官方兼容到 Java 25,但 Spring Boot 3.4.13 官方只兼容到 Java 24,较早的分支上限更低。(Home)
当前 Spring Boot 4.0.7 和 4.1.0 官方兼容到 Java 26;Spring Boot 3.5.15 的官方上限是 Java 25。(Home)
因为 Gradle 本身也有运行时 JDK 要求。
例如运行在 Java 21 上至少需要 Gradle 8.5,运行在 Java 25 上至少需要 Gradle 9.1。(Gradle用户手册)
不够。
还要确认:
本机JAVA_HOME
mvn -version使用的JDK
IDEA Maven Runner JRE
CI/CD构建JDK
Docker基础镜像
服务器运行JDK
因为 Spring Boot 3 基于更新后的 Jakarta EE 规范,很多 API 从 javax.* 迁移到了 jakarta.*。(GitHub)
始终查看你正在使用的 具体 Spring Boot 版本 对应的官方 System Requirements,而不是只搜索“Spring Boot 3 支持什么 JDK”。
最简单的判断规则:
Spring Boot 2.x:
最低通常是JDK8,但最高支持版本取决于具体分支
Spring Boot 3.x:
最低JDK17,不同分支最高支持Java 21~25
Spring Boot 4.x:
最低JDK17,当前4.0和4.1兼容到JDK26
实际项目推荐:
老Spring Boot 2项目:保持现有验证版本,逐步规划升级
Spring Boot 3新项目:优先JDK21
Spring Boot 4新项目:优先评估JDK25
追求最大兼容性:JDK17或JDK21
测试最新功能:Spring Boot 4 + JDK26
不要只看 Spring Boot 和 JDK 两个版本,还要同时检查:
Maven
Gradle
Spring Cloud
数据库驱动
Lombok
测试插件
字节码处理工具
Docker
CI/CD
生产服务器
JDK 下载地址:
各版本JDK镜像下载地址:JDK8 / 11 / 17 / 21 / 25 / 26
Windows 安装 JDK:
Windows安装JDK与JAVA_HOME环境变量配置教程
IDEA 配置 JDK:
Java class 版本对照:
Java版本号与class文件major version对照表
Maven 国内镜像:
Gradle 国内镜像:
Maven 编译器错误:
No compiler is provided in this environment解决办法
完整专题:
2026-06-26:
- 创建Spring Boot与JDK版本兼容表
- 增加Spring Boot 2.5、2.6、2.7兼容范围
- 增加Spring Boot 3.0至3.5兼容范围
- 增加Spring Boot 4.0、4.1兼容范围
- 增加Maven与Gradle版本要求
- 增加Spring Boot 2升级3注意事项
- 增加Spring Boot 3升级4注意事项
- 增加常见JDK版本不兼容报错排查
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。