gradle -v 显示旧版本是因为sdk use gradle仅作用于当前终端会话;需执行sdk default gradle 8.14.2设为默认,或在项目根目录配置.sdkmanrc并运行sdk env以确保ide和新终端生效。

gradle -v 显示的还是旧版本?检查 sdk use gradle 是否只作用于当前终端
执行 sdk use gradle 8.14.2 后,gradle -v 没变,大概率是因为该命令只影响当前 shell 会话。新开终端或 IDE 内置终端不会继承这个临时切换。
解决办法是设为默认版本:sdk default gradle 8.14.2。这会修改 ~/.sdkman/etc/config 中的 gradle_default_version,并更新 GRADLE_HOME 和 PATH 的软链接。
- 临时切换(仅当前终端):
sdk use gradle 7.6 - 永久设为默认(所有新终端生效):
sdk default gradle 7.6 - 验证是否生效:
gradle -v和echo $GRADLE_HOME
执行 sdk install gradle 却提示 “No candidate found”?确认 Gradle 是 SDKMAN 支持的候选者
sdk list 默认只显示已缓存的候选者列表。如果刚装完 SDKMAN 或很久没更新,Gradle 可能不在本地列表里。
先刷新远程索引:sdk update,再运行 sdk list gradle。此时应该能看到类似 8.14.2、8.9、7.6 等版本。
- 首次安装前务必先
sdk update - 国内用户若卡在列表加载,可配置代理或使用离线镜像源(见 ~/.sdkman/etc/config)
- 不加版本号执行
sdk install gradle会安装最新稳定版,但未必兼容你的项目
IDE(如 IntelliJ)里 gradle 命令仍报错?别忘了刷新外部工具配置
IntelliJ 默认读取系统 PATH,但如果你用的是 sdk use gradle 临时切换,IDE 启动时可能抓到的是旧版本或空值。即使设了 default,也要手动触发刷新。
进 Settings → Build, Execution, Deployment → Build Tools → Gradle,把 Gradle JVM 和 Gradle wrapper 选项检查一遍。更稳妥的做法是:在项目根目录放一个 .sdkmanrc 文件,内容为:
sdk home gradle 8.14.2 sdk home java 17.0.9-tem
然后在项目目录下执行 sdk env,IDE 重启后通常就能识别上下文环境。
多个项目要不同 Gradle 版本?用 .sdkmanrc 实现自动切换
SDKMAN 的 .sdkmanrc 不是全局配置,而是按目录生效的“环境契约”。你不需要每次 cd 进项目都手动 sdk use。
在项目根目录创建 .sdkmanrc,写入:
gradle=8.9 java=11.0.21-tem
然后运行 sdk env(或关闭再打开终端),SDKMAN 就会自动激活对应版本。注意:
- 必须在该目录下执行命令才生效
- 子目录会继承,但可被子目录中的同名
.sdkmanrc覆盖 - Git 提交时建议忽略该文件,改用
.gitattributes或文档说明版本要求
真正容易被忽略的点是:sdk use 和 sdk default 修改的是 shell 层的环境变量,而 IDE、CI 脚本、Docker 构建这些场景往往绕过 shell 初始化逻辑。所以项目级自动化依赖 .sdkmanrc + sdk env 组合,而不是单纯靠 default 设置。











