Gradle JVM 与项目 SDK 独立配置,需在 Settings 中指定 Gradle JVM 或在 gradle.properties 中通过 org.gradle.java.home 设置绝对路径,且须与 java.toolchain.version 保持一致。

Gradle JVM 和项目 SDK 是两套独立配置
很多人以为在 Project Structure → Project SDK 里选了 OpenJDK 17,Gradle 就会自动用它编译——其实不会。Gradle JVM 是 IDEA 单独控制的运行时,专门用来启动 Gradle daemon 进程。如果它和项目要求的 JDK 版本不一致,就会立刻报错,比如 Unsupported class file major version 65(对应 JDK 17)或 error: invalid source release: 21。
在 Settings 里手动指定 Gradle JVM 路径
打开 Settings → Build, Execution, Deployment → Build Tools → Gradle,找到 Gradle JVM 下拉框:
- 如果列表里已有目标 OpenJDK(如
openjdk-17.0.2),直接选中即可 - 如果没出现,点右侧
Add JDK...,然后选择你本地解压好的 OpenJDK 根目录(不是bin子目录,是包含lib、bin的那一层,比如/opt/homebrew/opt/openjdk@17/libexec或C:\Program Files\OpenJDK\jdk-17.0.2) - 确认路径下有
bin/java可执行文件,且终端里运行java -version输出匹配
用 gradle.properties 强制绑定更可靠
仅靠 IDEA 界面设置有个隐患:换电脑、重装 IDE 或团队协作时容易丢失。推荐双保险,在项目根目录的 gradle.properties 中写死:
org.gradle.java.home=/path/to/your/openjdk-17
这个路径必须是绝对路径,且指向 JDK 安装根目录(同上一步添加时的路径)。IDEA 在读取 Gradle 配置时会优先尊重这个值,比界面设置优先级更高。
注意:org.gradle.java.home 只影响 Gradle daemon 启动用的 JVM,不影响编译输出字节码版本——那个由 java.toolchain.version = "17" 控制,两者要保持一致。
常见失败信号和绕过方法
即使设置了,仍可能遇到同步失败或构建卡住,典型表现包括:
- 点击
Refresh project后无反应,Gradle 工具窗口灰掉 - 构建日志第一行就报
Could not determine java version from '21.0.1'(说明 IDEA 拿错了 JVM 启动 Gradle) - 切换分支后旧配置残留,新
build.gradle.kts里写了java.toolchain.version = "21",但 IDEA 还在用 JDK 17 启动 Gradle
此时最有效的方法是:关闭项目 → 删除项目根目录下的 .idea/gradle.xml → 重新 Open 项目。这能强制 IDEA 丢弃缓存的 Gradle JVM 绑定,重新从 gradle.properties 或 wrapper 解析。
真正麻烦的不是设一次,而是设完之后没人检查它是否被后续操作覆盖。尤其 Git 切换、插件更新、IDE 升级后,Gradle JVM 设置容易悄悄回退到默认值——建议把 gradle.properties 里的 org.gradle.java.home 当作唯一可信源,界面设置只作临时调试用。











