Idea下载的Gradle默认存于用户主目录下的.gradle/wrapper/dists/,Windows为C:\Users\{用户名}\.gradle\wrapper\dists\,该路径全局共享,相同版本只下载解压一次。

~/.gradle/wrapper/dists 是 Gradle Wrapper 发行包(如 gradle-8.7-bin.zip)默认存放位置,Windows 下对应 C:\Users\{用户名}\.gradle\wrapper\dists。
这个路径不是项目级的,而是用户级全局共享的 —— 同一 Gradle 版本在多个项目中只会下载并解压一次,后续直接复用。
为什么是 dists 目录?
Gradle Wrapper 的缓存逻辑分两层:
-
zipStoreBase+zipStorePath:决定 ZIP 包存哪(默认就是GRADLE_USER_HOME/wrapper/dists) -
distributionBase+distributionPath:决定 ZIP 解压后放哪(默认也是GRADLE_USER_HOME/wrapper/dists)
也就是说,默认配置下,ZIP 文件和解压后的目录都落在同一级子目录里,比如:
C:\Users\Alice\.gradle\wrapper\dists\gradle-8.7-bin\7a5x9y2z3q4w5e6r7t8u9i0o1p2q3r4\
├── gradle-8.7-bin.zip
└── gradle-8.7/
├── bin/
├── lib/
└── ...
注意:gradle-8.7-bin\7a5x9y2z... 这串哈希是 Gradle 根据 distributionUrl 自动生成的,不是手动生成的文件夹名。
gradle-wrapper.properties 里哪些配置影响缓存位置?
关键就四个参数,全部可配,但绝大多数人不需要改:
-
distributionBase=GRADLE_USER_HOME:基础路径只能是GRADLE_USER_HOME或PROJECT(后者会把发行包塞进项目根目录,不推荐) -
distributionPath=wrapper/dists:相对路径,拼在distributionBase后面 -
zipStoreBase=GRADLE_USER_HOME:ZIP 存储根,同上 -
zipStorePath=wrapper/dists:ZIP 存储相对路径
如果想把 ZIP 和解压目录分开(极少必要),可以设成不同组合,例如:
distributionBase=PROJECT distributionPath=gradle-dist zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/cache
但这样会导致每个项目都重复下载同一版本 ZIP,浪费空间和时间。
常见错误:手动移动 ZIP 或解压目录后构建失败
Gradle Wrapper 不会自动扫描已存在的 ZIP 或解压目录。它只认自己生成的哈希子目录结构。如果你:
- 把
gradle-8.7-bin.zip手动丢进dists目录但没放进对应哈希子目录 →gradlew仍会重下 - 删了哈希子目录但留着 ZIP →
gradlew会重新解压,但日志里可能报Invalid checksum(因校验失败) - 改了
distributionUrl却没清缓存 → 可能同时存在两个哈希目录,占用双倍空间
最稳妥的做法是:改完 gradle-wrapper.properties 后,删掉整个对应哈希子目录(或整个 dists 下旧版本),再跑一次 ./gradlew --version 触发重下载/解压。
想迁移到 D 盘?别改配置,用符号链接更安全
直接修改 distributionBase 到 D:\gradle-cache 看似简单,但会破坏多项目共享机制,且某些 CI 工具或 IDE(如 Android Studio)可能忽略该配置。
更通用、无侵入的做法是:
- 把整个
~/.gradle移到D:\.gradle - 在原位置
C:\Users\{用户名}\.gradle创建符号链接指向新位置
Windows 命令示例:
mklink /J "C:\Users\Alice\.gradle" "D:\.gradle"
这样所有 Gradle 缓存(wrapper/dists、caches/modules-2、daemon)一并迁移,无需改任何配置,也不影响团队协作一致性。
distributionUrl 全量计算得出,哪怕 URL 末尾多一个空格或换行符,哈希就完全不同 —— 这也是为什么复制粘贴 distributionUrl 时要格外小心。

















