SDK man使用指南
SDKMAN Java 版本管理指南 本文覆盖 SDKMAN 从安装到日常使用的完整流程,读完即可独立管理多版本 Java。 1. 什么是 SDKMAN SDKMAN(Software Development Kit Manager)是一个命令行工具,用于在 macOS / Linux 上管理多种 JDK 及其他 JVM 生态工具(Gradle、Maven、Kotlin 等)的版本。 核心能力:
SDKMAN Java 版本管理指南
本文覆盖 SDKMAN 从安装到日常使用的完整流程,读完即可独立管理多版本 Java。
1. 什么是 SDKMAN
SDKMAN(Software Development Kit Manager)是一个命令行工具,用于在 macOS / Linux 上管理多种 JDK 及其他 JVM 生态工具(Gradle、Maven、Kotlin 等)的版本。
核心能力:
- 一键安装 / 卸载不同版本的 JDK
- 在不同终端、不同项目中快速切换 Java 版本
- 支持按项目目录自动切换(类似
.nvmrc、.python-version)
2. 安装
2.1 安装 SDKMAN
curl -s "https://get.sdkman.io" | bash
安装完成后,按提示执行初始化脚本(或直接重启终端):
source "$HOME/.sdkman/bin/sdkman-init.sh"
2.2 验证安装
sdk version
输出类似 SDKMAN 5.19.0 即表示安装成功。
2.3 可选配置
配置文件位于 ~/.sdkman/etc/config,常用配置项:
# 安装时是否自动设为默认版本
sdkman_auto_answer=true
# 进入含 .sdkmanrc 的目录时是否自动切换版本
sdkman_auto_env=true
# 离开目录时是否恢复之前的版本
sdkman_auto_update=true
修改后重启终端或执行 source ~/.sdkman/bin/sdkman-init.sh 生效。
3. 安装 JDK
3.1 查看所有可用的 Java 版本
sdk list java
输出示例(部分):
================================================================================
Available Java Versions for macOS ARM64
================================================================================
Vendor | Use | Version | Dist | Status
--------------------------------------------------------------------------------
Eclipse | | 21.0.5 | tem |
| | 17.0.13 | tem | installed, local only
| >>> | 17.0.12 | tem | installed, default
| | 8.0.432 | tem | installed
Amazon | | 21.0.5 | amzn |
| | 17.0.13 | amzn |
| | 8.0.432 | amzn |
================================================================================
关键标识说明:
>>>— 当前正在使用的版本installed— 已安装default— 全局默认版本local only— 仅在某项目目录下生效
3.2 安装 JDK 8 和 JDK 17
# 安装 Eclipse Temurin (推荐发行版) JDK 8
sdk install java 8.0.432-tem
# 安装 Eclipse Temurin JDK 17
sdk install java 17.0.13-tem
发行版选择建议: 日常开发推荐
tem(Eclipse Temurin / Adoptium),它是免费的社区标准构建,兼容性好。
3.3 安装时自动确认
安装过程中会提示 Do you want java 17.0.13-tem to be set as default? (Y/n)。
如果已在配置文件中设置 sdkman_auto_answer=true,则跳过此提示,自动设为默认。
3.4 查看已安装的版本
sdk list java | grep installed
4. 切换 Java 版本
这是日常使用最频繁的操作,有三种切换粒度:
4.1 sdk use — 当前终端临时切换
sdk use java 8.0.432-tem
- 作用范围: 仅当前终端窗口
- 关闭终端后失效,恢复为默认版本
- 适用场景:临时测试某个版本
4.2 sdk default — 全局默认切换
sdk default java 17.0.13-tem
- 作用范围: 所有新打开的终端
- 永久生效,直到下次修改
- 适用场景:设定日常主力版本
4.3 项目级自动切换(最推荐)
步骤 1:开启自动环境切换
编辑 ~/.sdkman/etc/config:
sdkman_auto_env=true
步骤 2:在项目根目录创建 .sdkmanrc 文件
cd /path/to/your/project
# 方式 A:手动创建
echo "java=17.0.13-tem" > .sdkmanrc
# 方式 B:用当前版本生成
sdk env init
.sdkmanrc 文件内容示例:
# Enable auto-env through sdkman-auto-env setting
java=17.0.13-tem
步骤 3:自动生效
开启 sdkman_auto_env 后,每次 cd 进入该项目目录,SDKMAN 会自动切换到指定版本。离开目录时恢复之前的版本。
也可以手动触发:
sdk env # 按 .sdkmanrc 切换到项目指定版本
sdk env clear # 清除项目级设置,恢复默认版本
建议: 将
.sdkmanrc提交到 Git 仓库,团队成员 clone 后进入目录即可自动使用正确的 Java 版本。
5. 查看当前版本
# 查看当前使用的 Java 版本
sdk current java
# 查看所有已安装工具的当前版本
sdk current
也可以用标准的 Java 命令验证:
java -version
echo $JAVA_HOME
6. 卸载 JDK
# 查看已安装版本
sdk list java | grep installed
# 卸载指定版本
sdk uninstall java 8.0.432-tem
卸载前请确保该版本不是当前 default,否则需要先切换到其他版本。
7. 升级 JDK
# 查看哪些已安装的版本有更新
sdk upgrade
# 升级指定工具
sdk upgrade java
# 升级所有已安装的工具
sdk upgrade all
8. 管理其他 JVM 工具(加分项)
SDKMAN 不只能管理 Java,还能管理 Gradle、Maven、Kotlin 等:
# 查看所有可管理的工具
sdk list
# 安装 Maven
sdk install maven 3.9.9
# 安装 Gradle
sdk install gradle 8.11
# 切换 Maven 版本
sdk use maven 3.9.9
在 .sdkmanrc 中也可以同时指定多个工具:
java=17.0.13-tem
gradle=8.11
maven=3.9.9
9. 常用命令速查表
| 命令 | 说明 |
|---|---|
sdk list java |
列出所有可用的 Java 版本 |
sdk install java <version> |
安装指定 Java 版本 |
sdk uninstall java <version> |
卸载指定 Java 版本 |
sdk use java <version> |
当前终端临时切换 |
sdk default java <version> |
设置全局默认版本 |
sdk current java |
查看当前使用的版本 |
sdk env |
按 .sdkmanrc 切换项目版本 |
sdk env init |
用当前版本生成 .sdkmanrc |
sdk env clear |
清除项目级版本设置 |
sdk upgrade |
检查并升级工具 |
sdk selfupdate |
升级 SDKMAN 自身 |
sdk help |
查看帮助信息 |
10. 常见问题
Q: sdk: command not found
SDKMAN 未正确初始化。执行:
source "$HOME/.sdkman/bin/sdkman-init.sh"
并确保 ~/.zshrc(或 ~/.bash_profile)中包含这行。
Q: 安装后 java -version 还是旧版本
可能是系统 PATH 中有其他 Java 路径优先级更高。检查:
which java
echo $JAVA_HOME
确保 JAVA_HOME 指向 SDKMAN 的路径(~/.sdkman/candidates/java/current)。
Q: 项目用的 JDK 版本和系统默认不同,如何保证 IDE 也用对的版本?
在 IDE 中手动设置项目 SDK 路径指向 ~/.sdkman/candidates/java/<version>/,例如:
- IntelliJ IDEA: File → Project Structure → SDK → 添加
~/.sdkman/candidates/java/17.0.13-tem/ - VS Code: 在 settings.json 中配置
java.configuration.runtimes
Q: 如何完全卸载 SDKMAN?
rm -rf ~/.sdkman
然后从 ~/.zshrc 中删除 SDKMAN 相关的初始化代码。
11. 典型工作流示例
# 1. 安装两个版本
sdk install java 8.0.432-tem
sdk install java 17.0.13-tem
# 2. 设置 JDK 17 为全局默认
sdk default java 17.0.13-tem
# 3. 为老项目指定 JDK 8
cd ~/projects/legacy-app
echo "java=8.0.432-tem" > .sdkmanrc
sdk env # 立即生效
# 4. 为新项目使用 JDK 17(直接用默认即可,无需 .sdkmanrc)
cd ~/projects/new-app
java -version # 输出 17.x
# 5. 回到老项目,自动切换
cd ~/projects/legacy-app
# 如果开启了 sdkman_auto_env,自动变为 JDK 8
java -version # 输出 1.8.x