1. 概述

随着 Java 发布周期的加快,开发人员经常需要在本地环境同时维护多个 JDK 版本或不同厂商的构建版本。手动管理 PATH 环境变量不仅繁琐,还容易出错,堪称日常开发中的经典“踩坑”场景。

本文将介绍如何使用 SDKMAN! 轻松管理 SDK 的安装、切换和卸载,彻底告别版本混乱问题。

2. 什么是 SDKMAN!

SDKMAN! 是一个用于管理多个 SDK 多版本并行的命令行工具,SDKMAN! 将这些可管理的工具称为 “candidates”(候选者)。

它提供了一套简洁的 CLI 和 API,支持对候选者进行:

  • 列出可用版本(list)
  • 安装(install)
  • 切换(use / default)
  • 卸载(uninstall)

⚠️ 关键优势在于:它会自动帮你配置好环境变量,无需手动修改 JAVA_HOMEPATH

支持的 JVM 生态工具非常丰富,包括:

  • 语言类:Java、Groovy、Scala、Kotlin
  • 构建工具:Maven、Gradle、SBT
  • 框架/平台:Spring Boot、Vert.x 等

SDKMAN! 本身是一个开源、轻量级的 Bash 工具,跨平台支持良好,适用于所有主流 Unix 系统(macOS、Linux、WSL),并兼容 Bash 和 Zsh。

3. 安装 SDKMAN!

SDKMAN! 安装过程简单粗暴,只需一条 curl 命令:

$ curl -s "https://get.sdkman.io" | bash

执行后按提示完成安装即可。

⚠️ 注意:确保系统已安装 zipunzip 工具,否则安装可能失败。

安装完成后,需手动加载环境变量(或新开终端):

$ source "$HOME/.sdkman/bin/sdkman-init.sh"

验证是否安装成功:

$ sdk version
SDKMAN 5.8.5+522

如果能看到版本号,说明安装成功 ✅。

查看所有可用命令:

$ sdk help

更多自定义配置可参考官网文档:https://sdkman.io/install

4. 查看所有可用 SDK

使用 list 命令查看所有支持的 SDK 候选者:

$ sdk list

输出示例:

=====================================================
Available Candidates
=====================================================
q-quit                                  /-search down
j-down                                  ?-search up
k-up                                    h-help
-----------------------------------------------------
Java (11.0.7.hs-adpt)                https://zulu.org
...
                                   $ sdk install java
-----------------------------------------------------
Maven (3.6.3)                https://maven.apache.org
...
                                  $ sdk install maven
-----------------------------------------------------
Spring Boot (2.3.1.RELEASE)          http://spring.io
...
                             $ sdk install springboot
------------------------------------------------------
...

每个条目包含:

  • SDK 名称与默认版本
  • 官方网站链接
  • 安装命令提示

📌 提示:括号中标注的版本通常是稳定版或 LTS 版本,适合生产使用。

5. Java 版本管理

5.1 查看 Java 可用版本

列出所有可用的 Java 版本:

$ sdk list java

输出示例:

===================================================================
Available Java Versions
===================================================================
Vendor       | Use | Version | Dist    | Status | Identifier
-------------------------------------------------------------------
AdoptOpenJDK |     | 14.0.1  | adpt    |        | 14.0.1.j9-adpt
...
Amazon       |     | 11.0.8  | amzn    |        | 11.0.8-amzn
...
Azul Zulu    |     | 14.0.2  | zulu    |        | 14.0.2-zulu
...
BellSoft     |     | 14.0.2  | librca  |        | 14.0.2.fx-librca
...
GraalVM      |     | 20.1.0  | grl     |        | 20.1.0.r11-grl
...
Java.net     |     | 16.ea   | open    |        | 16.ea.6-open
...
SAP          |     | 14.0.2  | sapmchn |        | 14.0.2-sapmchn
...

字段说明:

  • Vendor:JDK 提供商
  • Use:当前使用的版本标记(>>>
  • Version:语义化版本号
  • Dist:分发简称(如 zulu, amzn
  • Identifier:安装时使用的唯一标识符

5.2 安装指定 Java 版本

以安装 Azul Zulu 的 Java 14 为例:

$ sdk install java 14.0.2-zulu

执行过程如下:

Downloading: java 14.0.2-zulu
In progress...
########### 100.0%
Repackaging Java 14.0.2-zulu...
Done repackaging...
Installing: java 14.0.2-zulu
Done installing!
Setting java 14.0.2-zulu as default.

✅ 安装完成后,SDKMAN! 会自动设置环境变量,立即生效。

你也可以安装自定义 JDK 构建(比如公司内部版本):

$ sdk install java custom-8 ~/Downloads/my-company-jdk-custom-8

5.3 切换 Java 版本

版本切换分两种场景:

  • 临时切换(仅当前终端会话有效):
$ sdk use java 14.0.1.j9-adpt
  • 永久设为默认
$ sdk default java 14.0.1.j9-adpt

✅ 推荐使用 default 设置主版本,避免每次重开终端都要重新 use

5.4 卸载指定版本

卸载已安装的 JDK 版本:

$ sdk uninstall java 14.0.1.j9-adpt

⚠️ 注意:不能卸载当前正在使用的版本,需先切换。

5.5 查看当前使用版本

查看当前激活的 Java 版本:

$ sdk current java
Using java version 14.0.2-zulu

等价于执行:

$ java -version

查看所有 SDK 的当前使用状态:

$ sdk current
Using:
java: 14.0.2-zulu
gradle: 6.2.2

6. 与 IDE 集成

SDKMAN! 所有 SDK 默认安装路径为:

~/.sdkman/candidates/

例如 Java 版本存放路径:

~/.sdkman/candidates/java/

查看目录结构:

$ ls -al ~/.sdkman/candidates/java/
total 0
drwxrwxrwx 1 user user 12 Jul 25 20:00 .
drwxrwxrwx 1 user user 12 Jul 25 20:00 ..
drwxrwxr-x 1 user user 12 Jul 25 20:00 14.0.2-zulu
lrwxrwxrwx 1 user user 14 Jul 25 20:00 current -> 14.0.2-zulu

📌 current 是一个软链接,指向当前激活的版本,方便 IDE 识别。

6.1 IntelliJ IDEA

在 IntelliJ 中配置 SDK:

  1. 打开 Project StructureProject Settings
  2. Project SDK 中选择 New…
  3. 选择 JDK,然后浏览到 SDKMAN! 路径,例如:
    ~/.sdkman/candidates/java/14.0.2-zulu
    

Project Structure dialog in IntelliJ

构建工具(Maven/Gradle)也可指定版本:

Maven Configuration in IntelliJ

Gradle Configuration in IntelliJ

💡 小技巧:确保 Gradle 或 Maven 使用的 Java 版本与项目 SDK 一致,避免编译兼容性问题。

6.2 Eclipse

在 Eclipse 中配置:

  1. 右键项目 → PropertiesJava Build PathLibraries
  2. 点击 Add Library…JRE System LibraryNextAlternate JREInstalled JREs…

或全局配置:

  1. WindowPreferencesJavaInstalled JREs
  2. 点击 Add…,选择标准 VM,路径填写:
    ~/.sdkman/candidates/java/14.0.2-zulu
    

Library managment in Eclipse

Installed JREs in Eclipse

7. 总结

SDKMAN! 是 JVM 开发者的必备效率工具,尤其适合需要频繁切换 Java 版本、使用多种构建工具的场景。

它解决了以下痛点:

  • ❌ 手动管理 JAVA_HOMEPATH
  • ❌ 不同项目依赖不同 JDK 版本
  • ❌ 安装包下载、解压、配置流程重复

✅ 一行命令安装,自动配置环境,无缝对接主流 IDE,真正实现“开箱即用”。

如果你还在手动管理 JDK 版本,强烈建议尝试 SDKMAN!,几分钟就能提升你的开发体验。


原始标题:Guide to SDKMAN! | Baeldung