同一台电脑可共存多个Gradle版本,但不应全局安装并切换PATH;应优先使用gradlew Wrapper锁定项目级版本,IDE和CI默认优先调用它;手动多版本需解压隔离+环境变量/alias临时切换,且注意~/.gradle/caches兼容性问题。

同一台电脑上可以同时存在多个 Gradle 版本,但不建议全局安装多个 Gradle 并靠修改 PATH 切换——容易污染终端环境、干扰 IDE 自动识别、导致构建日志中 gradle --version 和实际被调用的版本不一致。真正稳定的做法是:让每个项目自己管自己的 Gradle 版本,只在必要时为命令行临时切换提供轻量支持。
为什么不用全局覆盖式安装?
Gradle 官方强烈推荐使用 gradlew(Wrapper),它把版本锁定在项目级 gradle/wrapper/gradle-wrapper.properties 中:distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.4-bin.zip。IDE(Android Studio / IntelliJ)和 CI 流水线默认优先用这个,而不是你 PATH 里那个“最新版”。强行全局装多个再切 PATH,只会让你的终端行为和 IDE 行为不一致,调试构建失败时更难定位。
手动解压多版本 + 环境变量隔离(适合调试/脚本场景)
如果你确实需要在终端里快速试不同版本(比如验证某个插件兼容性),可以解压多个版本到固定目录,再用环境变量或 alias 隔离:
- 下载多个
gradle-x.y-bin.zip(如gradle-5.6.4-bin.zip、gradle-7.4.2-bin.zip),分别解压到/opt/gradle/gradle-5.6.4、/opt/gradle/gradle-7.4.2(macOS/Linux)或C:\gradle\gradle-5.6.4(Windows) - 不把它们加进全局
PATH;而是定义带前缀的变量:GRADLE_564_HOME=/opt/gradle/gradle-5.6.4、GRADLE_742_HOME=/opt/gradle/gradle-7.4.2 - 用 alias 快速切换当前终端会话:
alias gradle564='export PATH=$GRADLE_564_HOME/bin:$PATH',执行gradle564后,该终端中gradle --version就指向 5.6.4 - 注意:这种 alias 只对当前终端生效,关掉就还原,不会影响 IDE 或其他终端
Android Studio / IntelliJ 怎么选对 Gradle JVM 和 Wrapper?
IDE 不靠系统 PATH 找 Gradle,而是读两个地方:
-
gradle/wrapper/gradle-wrapper.properties→ 决定下载并使用哪个 Gradle 二进制(即构建工具本身版本) -
File > Project Structure > Project > JDK location或Settings > Build > Build Tools > Gradle > Gradle JVM→ 决定用哪个 JDK 运行 Gradle 进程(不是项目编译 JDK!) - 常见错误:
Unsupported class file major version通常是因为Gradle JVM设得太低(比如用 JDK 8 跑 Gradle 8.5),而不是 Gradle 版本装错了 - 建议:把
Gradle JVM设为项目sourceCompatibility对应的 JDK,例如项目用Java 17编译,这里就选 JDK 17
真正要警惕的“隐形冲突”点
多个 Gradle 版本共存时,最易被忽略的是 ~/.gradle/caches/ 目录。不同 Gradle 版本会共享这个缓存根目录,但内部结构不兼容。比如 Gradle 5.6.4 写的 caches/modules-2/metadata-2.97,Gradle 7.4.2 读不了,会触发重复下载甚至静默失败。解决办法只有两个:
- 保持项目用
gradlew,让 Gradle 自己管理缓存子目录(它会在~/.gradle/caches/下按版本建不同文件夹) - 如果非要手动运行不同版本,每次换版本前加
--no-daemon --refresh-dependencies,避免复用旧 daemon 和脏缓存











