最后更新: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?

下面是偏向实际项目落地的建议:

项目情况Spring Boot版本建议JDK说明
无法升级的老项目2.x按现有环境使用 JDK8 / 11 / 17不要只为追新而单独升级 JDK
Spring Boot 2.7 老项目2.7.18JDK11 或 JDK17兼顾兼容性和较新的运行环境
当前主流项目3.xJDK17 或 JDK21JDK17 最保守,JDK21 更适合新项目
Spring Boot 3.5 新项目3.5.x优先 JDK21,可评估 JDK253.5.15 官方兼容至 Java 25
Spring Boot 4 新项目4.xJDK21 或 JDK25JDK25 是当前最新 LTS
新版本兼容测试4.xJDK26适合技术验证,生产使用前应完整测试

截至 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与JDK版本兼容总表

下面列出几个常见维护版本的官方兼容范围。

Spring Boot版本最低Java版本官方兼容上限推荐使用场景
2.5.15Java 8Java 18历史老项目
2.6.15Java 8Java 19存量项目
2.7.18Java 8Java 21Spring Boot 2.x 后期项目
3.0.13Java 17Java 21早期 Spring Boot 3 项目
3.1.12Java 17Java 21存量 Spring Boot 3 项目
3.2.12Java 17Java 23Spring Boot 3.2 项目
3.3.13Java 17Java 23仍在使用的 3.3 项目
3.4.13Java 17Java 24仍在使用的 3.4 项目
3.5.15Java 17Java 25当前主流 3.x 分支之一
4.0.7Java 17Java 26Spring Boot 4.0 项目
4.1.0Java 17Java 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大版本?

例如都叫 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应该使用哪个JDK?

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怎么办?

如果项目满足下面情况:

长期稳定运行
依赖很多历史组件
使用旧版中间件或数据库驱动
暂时没有升级计划
只能运行在旧服务器环境

可以暂时保留 JDK8,但不要把“还能运行”等同于“无需维护”。

需要重点关注:

JDK安全更新
第三方依赖漏洞
Spring Boot具体维护版本
数据库驱动版本
TLS和证书兼容问题

Spring Boot 2.7可以使用JDK17吗?

可以。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可以使用JDK21吗?

Spring Boot 2.7.18 官方兼容到 Java 21。(Home)

但实际升级前仍要检查:

Lombok版本
Maven和Gradle版本
测试插件
Jacoco
ASM
Byte Buddy
数据库驱动
公司内部SDK

官方兼容 Spring Boot 本身,并不等于你的整个依赖树都已经验证通过。


五、Spring Boot 3.x为什么至少需要JDK17?

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

Spring Boot 3应该选JDK17还是JDK21?

我的建议:

维护历史项目: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可以使用JDK26吗?

不能一概而论。

当前官方文档显示:

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.x应该用JDK21还是JDK25?

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、数据库驱动、序列化组件和部署平台。


七、Spring Boot对Maven和Gradle版本有什么要求?

JDK 版本正确,不代表 Maven 或 Gradle 一定正确。

常见版本对应表

Spring Boot版本Maven要求Gradle要求
2.7.183.5+6.8.x、6.9.x、7.x、8.x
3.0.133.5+7.5+ 或 8.x
3.1.123.6.3+7.5+ 或 8.x
3.2.123.6.3+7.5+ 或 8.x
3.3.133.6.3+7.5+ 或 8.x
3.4.133.6.3+7.6.4+ 或 8.4+
3.5.153.6.3+7.6.4+ 或 8.4+
4.0.7 / 4.1.03.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

(Gradle用户手册)

这也是为什么升级 JDK 后,Gradle 项目可能先报错,而不是 Spring Boot 本身报错。


八、如何检查项目当前使用的版本?

1. 查看当前JDK

java -version
javac -version

2. 查看Maven实际使用的JDK

mvn -version

重点看:

Java version
Java home

3. 查看Gradle实际使用的JDK

Linux / macOS:

./gradlew --version

Windows:

gradlew.bat --version

重点看:

Gradle
Launcher JVM
Daemon JVM

4. 查看Spring Boot版本

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)

九、Maven项目如何指定Java版本?

Spring Boot 2.7 + Java 17

<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>

Spring Boot 3.5 + Java 21

<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>

Spring Boot 4.1 + Java 25

<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)


十、Gradle项目如何指定Java版本?

建议使用 Java Toolchain。

Groovy DSL

java {
    toolchain {
        languageVersion = JavaLanguageVersion.of(21)
    }
}

Kotlin DSL

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 2升级到3要注意什么?

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

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 3升级到4要注意什么?

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>

而应该先检查整个依赖生态。


十三、常见版本不兼容报错

1. invalid source release: 17

error: invalid source release: 17

通常表示:

项目要求Java 17编译
但Maven或IDEA实际使用的JDK低于17

检查:

java -version
javac -version
mvn -version

2. Unsupported class file major version

Unsupported class file major version

通常表示:

当前运行或构建工具不能识别更高版本JDK生成的class文件

可以查看:

Java版本号与class文件major version对照表


3. No compiler is provided in this environment

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解决办法


4. package javax.xxx does not exist

升级 Spring Boot 3 后出现:

package javax.servlet does not exist
package javax.persistence does not exist

通常是因为项目仍在使用旧的 javax 包名,需要迁移到对应的 jakarta 包,并升级相关依赖。


5. Gradle提示当前Java版本不支持

例如:

Unsupported Java
Could not open cp_settings generic class cache
Unsupported class file major version

可能不是 Spring Boot 不支持,而是 Gradle Wrapper 太旧。

执行:

./gradlew --version

然后对照 Gradle 与 Java 兼容矩阵。(Gradle用户手册)


十四、IDEA中要检查哪些JDK设置?

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 详细配置可以查看:

IDEA下载JDK很慢怎么办?手动配置本地JDK完整教程


十五、升级前检查清单

升级 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维护项目

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
建议:用于测试和新特性验证,不要未经测试直接替换生产环境

十七、常见问题FAQ

1. Spring Boot 2必须使用JDK8吗?

不是。

例如 Spring Boot 2.7.18 最低支持 Java 8,并兼容到 Java 21。具体可使用范围取决于 Spring Boot 的具体维护版本。(Home)


2. Spring Boot 3可以使用JDK11吗?

不可以。Spring Boot 3.0 开始最低要求 Java 17。(Home)


3. Spring Boot 3用JDK17还是JDK21?

都可以。

我的建议:

老项目或保守环境:JDK17
新项目:JDK21
Spring Boot 3.5并愿意充分测试:可评估JDK25

4. Spring Boot 4必须使用JDK25吗?

不是。

Spring Boot 4.0.7 和 4.1.0 最低仍是 Java 17,并兼容到 Java 26。JDK25 是当前最新 LTS,因此更适合长期新项目,但不是强制要求。(Home)


5. Spring Boot 3支持JDK25吗?

要看具体分支。

Spring Boot 3.5.15 官方兼容到 Java 25,但 Spring Boot 3.4.13 官方只兼容到 Java 24,较早的分支上限更低。(Home)


6. Spring Boot支持JDK26吗?

当前 Spring Boot 4.0.7 和 4.1.0 官方兼容到 Java 26;Spring Boot 3.5.15 的官方上限是 Java 25。(Home)


7. 为什么JDK版本正确,Gradle还是报错?

因为 Gradle 本身也有运行时 JDK 要求。

例如运行在 Java 21 上至少需要 Gradle 8.5,运行在 Java 25 上至少需要 Gradle 9.1。(Gradle用户手册)


8. 只修改pom.xml里的java.version就够了吗?

不够。

还要确认:

本机JAVA_HOME
mvn -version使用的JDK
IDEA Maven Runner JRE
CI/CD构建JDK
Docker基础镜像
服务器运行JDK

9. Spring Boot 2升级3为什么会出现大量javax报错?

因为 Spring Boot 3 基于更新后的 Jakarta EE 规范,很多 API 从 javax.* 迁移到了 jakarta.*。(GitHub)


10. 如何获得最准确的兼容信息?

始终查看你正在使用的 具体 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:

IDEA下载JDK很慢怎么办?手动配置本地JDK完整教程

Java class 版本对照:

Java版本号与class文件major version对照表

Maven 国内镜像:

Maven国内镜像settings.xml配置大全

Gradle 国内镜像:

Gradle国内镜像配置教程

Maven 编译器错误:

No compiler is provided in this environment解决办法

完整专题:

Java开发环境配置专题


更新记录

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版本不兼容报错排查