Windows 安装 SDKMAN 详细教程(JDK 多版本管理)

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 工具的打包文件供下载:

3. 配置 Git Bash 支持 zip 命令

下载完成后,请按以下步骤操作:

  1. 解压缩上述两个 zip 文件。
  2. zip.exebzip2.dll 文件拷贝至 Git 安装目录下的 \usr\bin 文件夹中。
  3. 一般来说,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 的当前默认版本目录:

  1. 右键"此电脑" → "属性" → "高级系统设置"
  2. 点击"环境变量"
  3. 在"系统变量"中点击"新建",添加 JAVA_HOME 环境变量:
    • 变量名:JAVA_HOME
    • 变量值:D:\JavaDev\sdkman\candidates\java\current
  4. 在"系统变量"中找到"Path"变量,选中后点击"编辑"
  5. 点击"新建",添加:%JAVA_HOME%\bin
  6. 点击"确定"保存所有更改

⚠️ 关键点:

  • 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)

相关推荐
橙-极纪元3 个月前
windows系统使用sdkman管理java的jdk版本,WSL和Git Bash哪个更能方便管理jdk版本
java·windows·sdkman
汤永红8 个月前
windows下git bash安装SDKMan报错Looking for unzip...Not found
java·git·sdkman
Oo_Amy_oO9 个月前
使用SDKMAN!安装springboot
spring boot·后端·sdkman
丁总学Java10 个月前
使用 SDKMAN! 在 Mac(包括 ARM 架构的 M1/M2 芯片)安装适配 Java 8 的 Maven
java·maven·sdkman
蚁景网络安全1 年前
MacOS java多版本安装与管理-sdkman
java·macos·sdkman
OceanSky61 年前
SDKMAN!关联已安装JDK
java·sdkman·关联已安装jdk
OceanSky61 年前
SDKMAN!安装Maven
maven·安装·版本切换·sdkman
OceanSky61 年前
SDKMAN!软件开发工具包管理器
后端·sdkman·开发工具包管理器