Gradle 8.6 安装必须避免路径含空格:Windows下GRADLE_HOME或JAVA_HOME含空格会导致gradle.bat、IDE、CI脚本等因未引号化路径而解析断裂,引发“系统找不到指定路径”等静默失败;唯一可靠解法是将二者均安装在纯英文无空格路径(如C:\dev\gradle-8.6)。

会,而且影响稳定复现,不是“可能出问题”。 Gradle 本身不直接解析自己的安装路径,但它的启动脚本(gradle.bat、gradle)和所有依赖它的工具(Maven 插件、IDE 构建器、CI 脚本)都会在拼接命令行时被 Windows CMD/PowerShell 的空格分隔逻辑破坏。
gradle.bat 在 PATH 中含空格时直接报“系统找不到指定路径”
当你把 Gradle 解压到 C:\Program Files\gradle-8.6 并将 %GRADLE_HOME%\bin 加入 PATH 后,执行 gradle -v,CMD 实际执行的是:
call "C:\Program Files\gradle-8.6\bin\gradle.bat" -v
但多数老版本批处理脚本(包括 Gradle 自带的 gradle.bat)未对变量加引号,导致它被切为:
C:\Program Files\gradle-8.6\bin\gradle.bat -v
结果只运行了 C:\Program,报错“系统找不到指定路径”。这不是 Gradle 的 bug,是 Windows 命令解析器的默认行为。
- Gradle 8.0+ 的
gradle.bat已修复此问题(内部加了"%~dp0"引号),但很多 CI 镜像、企业打包脚本或自定义 wrapper 仍用旧逻辑 - IDE(如 IntelliJ)调用 Gradle 时若通过
Runtime.exec()拼接字符串,且未手动加双引号,同样会断裂 - Android Studio 的 Gradle JVM 设置界面虽能选路径,但底层仍可能触发未引号化调用,尤其在离线构建或 AGP 插件初始化阶段
GRADLE_HOME 和 JAVA_HOME 同时含空格 → 构建链双重断裂
Gradle 启动后要调用 java 编译和运行任务。如果 JAVA_HOME=C:\Program Files\Java\jdk-21,而 GRADLE_HOME=C:\Program Files\gradle-8.6,两者叠加会让参数解析雪上加霜:
-
gradle build→ 启动gradle.bat(可能断裂)→ 调用%JAVA_HOME%\bin\java(再次断裂) - Maven 的
maven-compiler-plugin若配置了<fork>true</fork>,会在子进程中重新拼接javac路径,空格路径在此处几乎必炸 - Docker 构建中挂载宿主机 Gradle 目录时,
docker build --build-arg GRADLE_HOME=/mnt/Program Files/gradle-8.6会被 shell 层层转义,最终变成无效路径
为什么不能靠临时加引号补救?
你可以在命令行里手动写 "C:\Program Files\gradle-8.6\bin\gradle.bat" -v,也能让单次调用成功。但这无法覆盖整个工具链:
- IntelliJ 的
gradle-wrapper.properties生成逻辑、Gradle 的org.gradle.internal.jvm.JvmVersionDetector类、Spring Boot 的spring-boot:run插件,各自用不同方式拼接路径,有的走 JavaFile.toPath(),有的走ProcessBuilder.command(),有的甚至用String.split(" ") - CI 流水线(如 GitHub Actions 的
gradle/gradle-build-action)底层调用的是 shell 脚本,一旦环境变量含空格,for /f循环或set变量展开就会错切 - Gradle Wrapper 的
gradlew.bat是自动生成的,其内部硬编码路径拼接逻辑不受用户控制;你改了本地脚本,下次gradle wrapper重生成就又回去了
真正安全的做法只有一个:把 GRADLE_HOME 和 JAVA_HOME 都装在纯英文、无空格、无中文的路径下,例如 C:\dev\jdk-21 和 C:\dev\gradle-8.6。别省那几秒重装时间——空格带来的静默失败、日志缺失、跨平台不一致,远比一次干净安装的成本高得多。











