乔的Blog 返回首页

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 等)的版本。

核心能力:


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    |
================================================================================

关键标识说明:

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>/,例如:

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