终端执行./gradlew时使用java_home指定的jdk,而非android studio的project sdk;gradle jvm配置独立于project sdk,需在ide设置中手动指定;且gradle-wrapper.properties中的distributionurl必须匹配jdk版本要求(如jdk 17需gradle 8.0+)。

终端执行 ./gradlew 时用的是 JAVA_HOME
Gradle 启动器(Launcher JVM)默认读取系统环境变量 JAVA_HOME 来决定用哪个 JDK 运行自身。你执行 ./gradlew build 时,哪怕 IDEA 里已配好 JDK 17,终端也完全不看这个设置。常见现象包括:
-
java -version显示 JDK 11,但gradle --version输出的Daemon JVM却是 11.0.12 —— 这说明 Gradle 正在用JAVA_HOME指向的 JDK - 改完 Android Studio 的 Project SDK,终端构建仍报
Unsupported class file major version 61(对应 JDK 17),本质就是JAVA_HOME还指向旧版本
验证方式很简单:echo $JAVA_HOME 和 ./gradlew --version | grep "JVM" 必须指向同一路径。临时修复可用 JAVA_HOME=/path/to/jdk-17 ./gradlew build,长期建议在 ~/.zshrc 或 ~/.bashrc 中固化。
IDEA 里的 Gradle 构建进程只认 Settings → Gradle → Gradle JVM
Android Studio / IntelliJ IDEA 的 “Project SDK” 只控制代码编辑、编译(javac)、运行(Run/Debug 配置里的 JRE)三件事,和 Gradle 构建进程完全无关。后者由独立配置项 Gradle JVM 决定,位置在:
-
File → Settings → Build, Execution, Deployment → Build Tools → Gradle(Windows/Linux) -
Android Studio → Preferences → Build & Execution → Build Tools → Gradle(macOS)
这个下拉框默认常显示 bundled (JetBrains Runtime) 或空值,它不会自动同步 Project SDK。必须手动选中你本地安装的 JDK 17 路径(如 /Library/Java/JavaVirtualMachines/jdk-17.0.6.jdk/Contents/Home)。改完后需点击 Reload project 或重启 IDE,否则 Gradle Daemon 不会加载新 JVM。
gradle-wrapper.properties 中的 distributionUrl 也参与版本决策
即使终端和 IDE 的 JDK 都设对了,如果项目 gradle/wrapper/gradle-wrapper.properties 里写着:
distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-bin.zip
那 Gradle 8.0 之前的版本根本不支持 JDK 17 编译,构建会直接失败——AGP 8.0+ 强制要求 Gradle ≥ 8.0,而 Gradle 8.0 是首个正式支持 JDK 17 的稳定版。检查方式:
- 确认
distributionUrl指向gradle-8.0-bin.zip或更高(如8.11.1) - 不要只升级
com.android.tools.build:gradle插件版本,wrapper 必须同步更新 - 若公司内网无法下载,可手动下载 bin 包放入
~/.gradle/wrapper/dists/对应目录
Flutter / Spring Boot 等框架还会额外引入一层 Java 决策逻辑
像 flutter run 或 mvn spring-boot:run 这类命令,既不走 IDEA 的 Gradle JVM,也不一定尊重 JAVA_HOME,而是按各自工具链规则找 Java:
-
flutter run会继承当前 shell 的JAVA_HOME,但 Android toolchain 日志里显示的Java binary at才是真实路径,可能被android/gradle.properties中的org.gradle.java.home覆盖 -
mvn spring-boot:run默认用mvn自身启动的 JVM(即JAVA_HOME),但可通过-Djava.home=...显式指定 -
java -jar app.jar完全取决于你敲命令时的java命令路径,和构建时用的 JDK 无关
真正容易被忽略的是:同一个项目,在 IDEA 点运行按钮、终端跑 ./gradlew、再跑 java -jar,背后可能是三个完全不同的 JDK 实例在工作。排查时别只盯一个地方,得分别确认这三层的 Java 路径是否一致。











