SDKMAN(Software Development Kit Manager)是一个用于管理和切换不同版本软件开发工具包(如 Java、Groovy、Scala 等)的命令行工具。在类 Unix 系统(Linux/macOS)中使用非常广泛,但在 Windows 上需要借助类似 Git Bash 的 Bash 模拟环境来运行。
一、准备工作:配置 Git Bash 支持 zip 命令
SDKMAN 在安装时依赖 zip 命令,而 Git for Windows 默认只自带 unzip 命令,不包含 zip 命令,因此我们需要为 Git Bash 手动添加 zip 功能。
1. GnuWin Files 下载地址
我们可以从 GnuWin32 站点下载适用于 Windows 的 GNU 工具,该站点提供了许多常用 GNU 工具的 Windows 兼容版本。
在该站点中,可下载 zip 的二进制压缩包。
2. 配置 Git Bash 支持 zip 命令
下载完成后,请按以下步骤操作:
- 解压缩上述两个 zip 文件。
- 将
zip.exe和bzip2.dll文件拷贝至 Git 安装目录下的\usr\bin文件夹中。 - 一般来说,Git 安装目录为:
C:\Program Files\Git\usr\bin
⚠️ 注意:确保文件被写入 usr\bin 目录,这样才能在 Git Bash 中识别 zip 命令。
3. 验证配置是否成功
打开 Git Bash 窗口,运行以下命令检查是否可以正常识别:
zip --version
如果命令能正常输出版本信息,则表示配置成功,我们可以继续进行 SDKMAN 的安装。
二、安装 SDKMAN
接下来,我们正式开始 SDKMAN 的安装流程。
1. 设置 SDKMAN 目录环境变量并使其生效
首先需要指定 SDKMAN 的安装目录(注意:此时不要手动创建该目录,SDKMAN 会自动创建):
export SDKMAN_DIR="/d/JavaDev/sdkman"
你也可以将该命令加入 .bashrc 或 .bash_profile 文件中,以实现永久配置(建议)。
echo 'export SDKMAN_DIR="/d/JavaDev/sdkman"' >> ~/.bashrc
添加环境变量到配置文件后,需要重新加载配置文件使其生效:
source ~/.bashrc
然后验证环境变量是否设置成功:
echo $SDKMAN_DIR
如果输出 /d/JavaDev/sdkman,则表示环境变量配置成功。
2. 安装 SDKMAN
执行以下命令自动下载并安装 SDKMAN:
curl -s "https://get.sdkman.io" | bash
安装完成后,会提示你执行一行命令来初始化 SDKMAN,示例如下:
source "$SDKMAN_DIR/bin/sdkman-init.sh"
执行它后即可激活 SDKMAN。
3. 验证安装是否成功
执行以下命令检查 SDKMAN 是否安装成功:
sdk version
如果输出 SDKMAN 的版本号,则安装成功。
三、使用 SDKMAN 管理 JDK
SDKMAN 最核心的功能之一是管理 JDK 的安装与切换。
1. 查看 JDK 版本列表
sdk list java
该命令会显示所有可用的 JDK 版本,包括:
- Use 列显示
>>>表示当前正在使用的版本 - Status 列显示
installed表示已安装的版本 - 无任何标识的表示可安装但尚未安装的版本
2. 安装指定版本 JDK
例如安装 OpenJDK 17:
sdk install java 17.0.8-tem
3. 查看当前已安装的 JDK
再次运行 sdk list java 命令,已安装的版本会显示 > 标识。
4. 查看 JDK 安装路径
使用以下命令查看指定 JDK 版本的安装路径:
sdk home java 17.0.8-tem
该命令会输出对应 JDK 版本的实际安装目录路径。
5. 切换默认 JDK 版本
请使用管理员运行 Git Bash,否则不能正常创建 symlink。
非管理员用户使用命令切换 sdk 版本时会出现提示 '
cannot create current symlink, fall back to copy!'。
从提示可以看出,创建软连接失败,改为使用拷贝 sdk 的方式,这虽然不影响最终使用,但是我们还是推荐使用管理员以方式操作(正确的symlink可以使用sdk current java查看当前版,非管理员方式的 copy 结果查看不了当前版本)。
使用该命令切换默认 JDK(重启会话后仍然有效):
sdk default java 17.0.8-tem
小技巧:命令行输入
sdk default java后按两次tab键会列出所有已经安装的版本,方便拷贝切换。
6. 临时切换 JDK 版本
以下命令是临时切换,只在当前会话生效:
sdk use java 11.0.20-tem
7. 卸载 JDK
sdk uninstall java 11.0.20-tem
四、配置系统环境变量
通过 SDKMAN 安装的 JDK 只能在 Git Bash 环境中使用。如果需要在 Windows 原生 CMD 或 PowerShell 中使用 java 命令,需要配置系统环境变量。
1. 问题现象
在 Windows CMD 命令行中执行以下命令会提示'不是内部或外部命令':
java -version
2. 解决方案:配置 JAVA_HOME 和 Path 环境变量
为了保持 SDKMAN 的版本切换功能,我们应该将系统环境变量指向 SDKMAN 的当前默认版本目录:
- 右键'此电脑' → '属性' → '高级系统设置'
- 点击'环境变量'
- 在'系统变量'中点击'新建',添加 JAVA_HOME 环境变量:
- 变量名:
JAVA_HOME - 变量值:
D:\JavaDev\sdkman\candidates\java\current
- 变量名:
- 在'系统变量'中找到'Path'变量,选中后点击'编辑'
- 点击'新建',添加:
%JAVA_HOME%\bin - 点击'确定'保存所有更改
⚠️ 关键点:
current目录指向当前通过sdk default命令设置的默认版本- 当通过 SDKMAN 切换默认版本时,
current目录会自动指向新的默认版本 - 这样配置可以保持 SDKMAN 的版本切换功能在 Windows 系统环境中同样生效
3. 验证配置结果
重新打开 CMD 窗口,执行:
java -version
如果能正常显示 Java 版本信息,则配置成功。
4. 验证版本切换功能
在 Git Bash 中切换 JDK 版本后,在 CMD 中验证是否同步:
# 在 Git Bash 中切换默认版本 sdk default java 11.0.20-tem
# 在 CMD 中验证(需要重新打开 CMD 窗口) java -version
⚠️ 注意:由于 Windows 系统环境变量的缓存机制,可能需要重新打开 CMD 窗口才能看到版本切换的效果。
五、结语
通过以上步骤,你已成功在 Windows 系统中借助 Git Bash 安装并配置了 SDKMAN,并掌握其管理 JDK 的基本命令。未来你可以用它来轻松管理多版本的 Java、Groovy、Scala 等多种开发工具,提升开发效率。

