Appearance
SDKMAN! —— 多语言SDK版本管理器
SDKMAN! 是一个跨平台(主要支持 macOS 与 Linux)的命令行工具,用于安装、管理并切换多种开发工具/SDK 的多个版本,如 Java、Kotlin、Scala、Groovy、Maven、Gradle 等。它能让你在同一台机器上轻松维护不同项目所需的不同工具链版本。
为什么选择 SDKMAN!
- 多版本共存与一键切换:在同一环境下维护多个版本并快速切换
- 覆盖主流 JVM 生态工具:Java、Maven、Gradle、Kotlin、Scala、Groovy 等
- 非侵入式与用户态安装:无需管理员权限,安装于用户目录下
- 面向项目的环境文件:以 .sdkmanrc 定义项目所需版本,进入目录即可生效
- 统一命令体验:安装、卸载、查看、切换等命令一致
安装
支持 macOS 与 Linux。Windows 推荐通过 WSL 使用,或选择其他 Windows 版本管理方案。
- 交互式安装(推荐):
bash
curl -s "https://get.sdkman.io" | bash
# 安装完成后,按提示重新打开终端,或手动执行:
source "$HOME/.sdkman/bin/sdkman-init.sh"
- 验证安装:
bash
sdk version
若出现 “command not found”,请检查 shell 初始化文件是否已 source:
bash
# zsh
source "$HOME/.sdkman/bin/sdkman-init.sh"
# bash
source "$HOME/.sdkman/bin/sdkman-init.sh"
基本概念
- Candidate(候选项):被管理的工具类别,例如 java、maven、gradle
- Version(版本):某个候选项的具体版本号/发行版标识
- Default(默认版本):当前用户全局默认使用的版本
- Current(当前版本):当前会话正在使用的版本
常用命令速查
- 查看所有候选项与可用版本:
bash
sdk list # 总览
sdk list java # 查看 Java 可用发行版/版本
sdk list maven # 查看 Maven 版本
- 安装/卸载:
bash
sdk install java <version> # 安装指定 Java 版本
sdk uninstall java <version> # 卸载指定 Java 版本
- 切换/设置默认:
bash
sdk use java <version> # 当前会话临时切换
sdk default java <version> # 设置为全局默认版本
- 查询当前版本:
bash
sdk current # 显示所有候选项的当前版本
sdk current java # 显示 Java 当前版本
- 升级:
bash
sdk upgrade # 检查并升级已安装候选项
- 帮助:
bash
sdk help
典型工作流示例(以 Java/Maven/Gradle 为例)
bash
# 查看可安装版本
sdk list java
sdk list maven
sdk list gradle
# 安装所需版本(示例版本号请以实际可用为准)
sdk install java 17.0.x-tem
sdk install maven 3.9.x
sdk install gradle 8.x
# 设置默认版本
sdk default java 17.0.x-tem
sdk default maven 3.9.x
sdk default gradle 8.x
# 临时切换当前会话版本
sdk use java 21.0.x-tem
项目级版本固定(.sdkmanrc)
在团队协作与多项目并行时,建议使用 .sdkmanrc 固定项目所需版本,确保一致的构建环境。
- 在项目根目录创建 .sdkmanrc:
properties
java=17.0.x-tem
maven=3.9.x
gradle=8.x
- 初始化与启用项目环境:
bash
sdk env init # 在当前目录创建样例 .sdkmanrc(如未存在)
# 根据需要编辑 .sdkmanrc 后
sdk env # 读取并切换到 .sdkmanrc 指定版本
sdk env install # 按 .sdkmanrc 安装缺失的版本
提示:进入包含 .sdkmanrc 的目录后执行
sdk env
即可一键切换;离开目录后可通过sdk use
或sdk default
恢复其它版本。
目录结构与存放位置
- 安装根目录:
$HOME/.sdkman
- 候选项目录:
$HOME/.sdkman/candidates/<candidate>
- 初始化脚本:
$HOME/.sdkman/bin/sdkman-init.sh
与其他工具的对比与协同
- asdf:多语言版本管理器,插件生态丰富;SDKMAN! 更聚焦 JVM 生态,开箱即用
- jenv:专注 Java 版本管理;SDKMAN! 同时覆盖 Maven/Gradle 等多种候选项
- vfox:通用跨平台版本管理(参见本仓库 vfox 文档);SDKMAN! 在 JVM 家族上资源更集中
- nvm:Node.js 版本管理器;可与 SDKMAN! 并存,分别管理不同技术栈
常见问题(FAQ)
sdk 命令无效或找不到:
- 确认已执行
source "$HOME/.sdkman/bin/sdkman-init.sh"
- 重新打开终端或在 shell 配置文件(如
~/.zshrc
、~/.bashrc
)中追加上述 source 行
- 确认已执行
无法下载或网络问题:
- 检查代理设置(HTTP_PROXY/HTTPS_PROXY)
- 稍后重试或切换网络
Windows 如何使用:
- 推荐在 WSL 中安装使用
卸载
bash
# 删除目录
rm -rf "$HOME/.sdkman"
# 从 shell 初始化文件中移除对 sdkman-init.sh 的引用
最佳实践
- 团队项目统一使用 .sdkmanrc 固定版本,保证一致性
- 使用
sdk default
设置“常用版本”,再通过sdk use
临时切换 - 定期
sdk upgrade
,关注安全修复与功能更新 - 与 CI/CD 协同:在构建容器/镜像中预装所需版本,避免每次动态下载
通过 SDKMAN!,你可以以最小成本在本机维护稳定、可重复的多版本开发环境,显著提升多人协作与多项目并行时的开发效率与一致性。