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 兼容版本。

  • 站点地址: https://sourceforge.net/projects/gnuwin32/files/

在该站点中,可下载 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 窗口,运行以下命令检查是否可以正常识别:

zip --version 

如果命令能正常输出版本信息,则表示配置成功,我们可以继续进行 SDKMAN 的安装。

二、安装 SDKMAN

接下来,我们正式开始 SDKMAN 的安装流程。

1. 设置 SDKMAN 目录环境变量并使其生效

首先需要指定 SDKMAN 的安装目录(注意:此时不要手动创建该目录,SDKMAN 会自动创建):

exportSDKMAN_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 的当前默认版本目录:

  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 窗口,执行:

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 等多种开发工具,提升开发效率。

希望本教程对你有帮助。如需进一步学习 SDKMAN 的高级使用方法,欢迎参考其官方文档


(END)

Read more

【Python】基础语法入门(一)

【Python】基础语法入门(一)

前言 Python作为一门入门门槛低、生态丰富的编程语言,Python早已成为编程初学者、数据分析从业者、后端开发者的首选工具之一。而掌握Python的第一步,就是吃透最核心的基础语法,常量与表达式、变量与类型、注释、输入输出及运算符。今天,我们就结合实例,手把手带你入门这些必备知识点,助你快速搭建Python语法框架。 一、常量与表达式 刚接触 Python 时,我们可以先把它当作一个功能强大的计算器 ,通过简单的表达式,以完成各类算术运算,比如简单的加减乘除,甚至复杂的乘方运算,都能直接通过“表达式”实现。 核心知识点: 1. 表达式与常量:形如1 + 2 * 3的算式称为“表达式”,运算结果为“表达式的返回值”;1、2、3这类固定值称为“字面值常量”,+、-、*、/则是“运算符”。 2. 运算规则:遵循“先乘除后加减”的数学逻辑,

By Ne0inhk

【超详细】Python FastAPI 入门:写给新手的“保姆级”教程

【超详细】Python FastAPI 入门:写给新手的“保姆级”教程(2025–2026 最新版) 这篇教程的目标是: 零基础 → 能独立写出生产级别的 RESTful API 预计认真跟着做完前 80%,你大概需要 3–10 天(每天 2–4 小时)。 目录(建议按顺序阅读) 1. 为什么选择 FastAPI(而不是 Flask / Django) 2. 环境准备(最稳的几种方式) 3. 第一个 FastAPI 程序(Hello World) 4. 核心概念速览(5 分钟建立大局观) 5. 路径参数、查询参数、请求体(

By Ne0inhk

如何解决Python pip Error “Preparing metadata (pyproject.toml) did not run successfully“

Python pip Error Preparing metadata pyproject.toml did not run successfully * 现象 * 发现 * 解决方法 * NumPy与Python版本兼容表 现象 python版本为3.13.5,自动安装numpy时发生报错 发现 在报错末尾我们发现有段日志 ninja: build stopped: subcommand failed. 我查到ninja是一种编译工具,类似cmake,而ninja更新速度,可能自动安装的版本numpy版本太高,所以即便是最新的ninja,也无法编译最新的numpy,从而报错。 解决方法 降低numpy的版本 NumPy与Python版本兼容表 NumPy版本兼容的Python版本>2.13.151.26.03.9-3.121.25.03.9-3.111.

By Ne0inhk

python获取飞书文档内容

一.背景        飞书(Lark)作为企业级协同办公平台,其文档功能(飞书文档 / 多维表格 / 电子表格)已成为企业沉淀知识、管理业务数据、协作沟通的核心载体 —— 涵盖产品需求文档、业务报表、运营策略、会议纪要等关键信息。Python 作为企业级自动化脚本、数据处理、业务系统集成的主流语言,实现 “Python 获取飞书文档内容” 的需求,源于传统飞书文档使用方式的痛点,以及企业对 “文档数据自动化、数字化、集成化” 的核心诉求。 1.传统飞书文档内容获取的核心痛点 1. 手动操作效率低,无法规模化处理传统方式需人工打开飞书客户端 / 网页,手动复制、粘贴文档内容,或导出为 PDF/Word 后再处理:当企业需批量获取数十 / 上百份飞书文档(如全部门的周报文档、全产品线的需求文档)时,手动操作耗时耗力,且易出现内容遗漏、格式错乱等问题;

By Ne0inhk