使用SDKMAN安装和管理多个版本的jdk

SDKMAN!Software Development Kit Manager)是一个用于管理开发工具套件(SDK)的开源工具。它允许开发人员在 Unix 系统(如 macOS 和 Linux)上方便地安装、管理和切换多个 SDK 版本。同时也可以用于管理开发工具如 Maven、Gradle 和 Scala,以及在多个版本之间轻松切换。

注:Windows 系统需要借助 WSL 或 Git Bash ,详见:https://sdkman.io/install

安装

1
2
curl -s "https://get.sdkman.io" | bash
source "$HOME/.sdkman/bin/sdkman-init.sh"

查看本机当前可用的版本

执行命令 sdk list java 可以查询适用于当前系统的发行版,以及已安装和当前在用的版本。

各发行版举例说明:

供应商和发行版 后缀 例子 说明
AdoptOpenJDK/Adoptium (Temurin) tem 11.0.23-tem Adoptium 是由 AdoptOpenJDK 项目演变而来,由 Eclipse 基金会管理。
Amazon Corretto amzn 11.0.23-amzn Amazon 提供的 OpenJDK 版本,经过增强和支持的长期支持版本。
GraalVM CE (Community Edition) graalce 11.0.23-graalce Oracle 提供的支持多语言的 JDK,包括 Java、JavaScript 等。
Gluon gln 11.0.23-gln 专注于 JavaFX 的发行版。
Liberica JDK librca 11.0.23-librca BellSoft 提供的 OpenJDK 发行版,包含完整的 Java SE 平台实现。
Microsoft Build of OpenJDK ms 11.0.23-ms Microsoft 提供的 OpenJDK 版本。
Oracle JDK oracle 11.0.23-oracle Oracle 提供的官方 JDK 版本。
SAP Machine sapmchn 11.0.23-sapmchn SAP 提供的 OpenJDK 版本。
Semeru (IBM) sem 11.0.23-sem IBM 提供的 OpenJDK 发行版。
Tencent Kona JDK kona 11.0.23-kona 腾讯提供的 OpenJDK 版本。
Zulu by Azul Systems zulu 11.0.23-zulu Azul 提供的 OpenJDK 版本,支持多种平台和配置。

如果执行命令时出现下面的错误:

1
2
3
4
5
6
==== INTERNET NOT REACHABLE! ===================================================

Some functionality is disabled or only partially available.
If this persists, please enable the offline mode:

$ sdk offline

可以尝试按照下面的步骤解决

1
2
3
4
5
6
7
8
9
10
# 1. 清除缓存
sdk flush archives
sdk flush candidates
# 或按顺序执行
sdk offline enable
sdk list java
sdk offline disable

# 2. 再次尝试
sdk list java

管理 SDK

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 在上一步,确定需要安装的 SDK 版本 tag 标识,比如安装 11.0.23-zulu
sdk install java 11.0.23-zulu

# 添加以下环境变量到 .bashrc 或 .zshrc
export JAVA_HOME="$HOME/.sdkman/candidates/java/current"
export PATH="$JAVA_HOME/bin:$PATH"

# 使生效
source ~/.zshrc

# 验证
java -version

# 切换其它版本
sdk use java 17.0.11-amzn

# 更改默认版本,对应 .sdkman/candidates/java/current
sdk default java 17.0.11-amzn
sdk current java

# 卸载之前安装的 SDK
sdk uninstall java java 17.0.11-amzn

设置代理

编辑 ~/.sdkman/etc/config 文件加入以下内容后,执行 source "$HOME/.sdkman/bin/sdkman-init.sh" 使其生效。

1
2
3
4
5
6
7
8
9
# Proxy configuration
sdkman_http_proxy=127.0.0.1
sdkman_http_proxy_port=7890
# sdkman_http_proxy_user=your_username
# sdkman_http_proxy_pass=your_password
sdkman_https_proxy=127.0.0.1
sdkman_https_proxy_port=7890
# sdkman_https_proxy_user=your_username
# sdkman_https_proxy_pass=your_password

升级

1
sdk update

卸载

1
2
3
4
5
# 1. 删除 SDKMAN 安装目录
rm -rf ~/.sdkman

# 2. 修改 .bashrc 或 .zshrc等,删除 SDKMAN 相关配置
vim ~/.zshrc