Gradle构建Java项目必须依赖JDK而非JRE,因javac、jar等编译工具仅存在于JDK中;JRE缺少这些组件会导致gradle build报错“javac not found”或同步失败,正确做法是安装JDK(如17或21)、确保JAVA_HOME指向JDK根目录并验证javac可用。

gradle 命令——但实际执行 Java 项目构建时,它会调用 javac 编译源码、jar 打包、javadoc 生成文档等工具,这些都只存在于 JDK 中,JRE 完全不包含它们。
常见错误现象:
- 执行
gradle build时报错:Could not determine java version from 'xx.x.x'或直接提示javac is not found - IDE(如 IntelliJ IDEA)里 Gradle 同步失败,日志里反复出现
Unable to find a javac compiler -
gradle -v能成功输出版本,但一跑构建任务就挂——说明 JVM 启动没问题,但编译链路断了
为什么有人误以为 JRE 够用?
因为 Gradle 的 wrapper 脚本(gradlew)或系统级 gradle 命令确实只依赖 java 可执行文件,而这个文件在 JRE 和 JDK 里都有。但只要你项目里有 .java 源文件,或者用了 java 插件(绝大多数 Java 项目都用),Gradle 就一定会去调 JDK_HOME/bin/javac。
正确做法:
- 安装完整 JDK(推荐 JDK 17 或 JDK 21,Gradle 8.6+ 官方支持良好)
- 确保
JAVA_HOME指向 JDK 根目录(不是 JRE),且该路径下存在bin/javac - 验证方式:终端执行
which javac(macOS/Linux)或where javac(Windows),结果应非空;再执行javac -version确认可调用 - 不要设置
GRADLE_HOME指向 JRE 目录,也不要把 JRE 的bin加进PATH试图“覆盖”JDK
Gradle Wrapper 是个例外,但不改变本质
gradlew 脚本会自动下载并运行对应版本的 Gradle 发行包(如 gradle-8.6-bin.zip),但它仍然需要宿主机提供可用的 javac——Wrapper 不打包 JDK,也不绕过编译环节。
真正省事的方案是统一用 JDK + gradlew,而不是省掉 JDK 去折腾 JRE。很多构建失败,根源就在 JAVA_HOME 指向了 JRE 而非 JDK,这点极易被忽略。


















