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

SDKMAN!Software Development Kit Manager)是一个用于管理开发工具套件(SDK)的开源工具。它允许开发人员在 Unix 系统(如 macOS 和 Linux)上方便地安装、管理和切换多个 SDK 版本。

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

同时 SDKMAN 也可以管理其它开发工具如 Maven、Gradle 和 Scala等,以及在多个版本之间轻松切换。

本文主要以管理 jdk 为例进行说明。

安装

1
2
3
4
5
6
7
8
9
10
11
# 默认安装 ~/.sdkman
curl -s "https://get.sdkman.io" | bash
source "$HOME/.sdkman/bin/sdkman-init.sh"
sdk version

# 安装到指定位置
export SDKMAN_DIR="/usr/local/sdkman" && curl -s "https://get.sdkman.io" | bash

# 对于在CI(持续集成)环境中安装,若不适合修改shell配置,则在下载安装程序时添加参数rcupdate=false
# 更多介绍,参照:https://sdkman.io/install/#ci-mode
curl -s "https://get.sdkman.io?rcupdate=false" | bash

查看本机当前可用的版本

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

各发行版举例说明:

提供商标识 版本后缀 完整版本标识 提供商说明
Corretto amzn 17.0.15-amzn 亚马逊发布的 Corretto OpenJDK 构建版本
GraalVM CE graalce 17.0.9-graalce 社区版 GraalVM,支持 AOT 编译和运行时优化
GraalVM Oracle graal 17.0.12-graal Oracle 提供的 GraalVM 版本
JetBrains jbr 17.0.14-jbr JetBrains 提供的定制 JDK,适配 IntelliJ 平台
Liberica librca 17.0.15-librca BellSoft 提供的全平台 JDK 构建
Microsoft ms 17.0.15-ms 微软发布的 OpenJDK,兼容 Azure 环境
Oracle oracle 17.0.12-oracle Oracle 官方 LTS 支持的 JDK 版本
SapMachine sapmchn 17.0.15-sapmchn SAP 发布的 OpenJDK 构建版本
Semeru sem 17.0.15-sem IBM 提供的基于 OpenJ9 的 JDK 构建
Temurin tem 17.0.15-tem Eclipse Adoptium 项目的主力发行版
Tencent kona 17.0.15-kona 腾讯维护的 KonaJDK,优化云和大数据场景
Zulu zulu 17.0.15-zulu Azul Systems 提供的 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
23
24
25
# 在上一步,确定需要安装的 SDK 版本 tag 标识,比如安装 17.0.15-zulu
sdk install java 17.0.15-zulu

# 如果什么都不加,是安装最新稳定版
sdk install java

# 添加以下环境变量到 .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.15-zulu

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

# 卸载之前安装的 SDK
sdk uninstall java 17.0.15-zulu

设置代理

编辑 ~/.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
2
3
4
5
6
7
8
# 升级 SDKMAN
sdk selfupdate

# 更新可安装的候选版本列表
sdk update

# 查看已安装到版本是否需要升级
sdk upgrade

卸载

1
2
3
4
5
# 1. 删除 SDKMAN 安装目录(如果需要,最好先备份一下这个目录再删除)
rm -rf ~/.sdkman

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