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