SDKMAN!
SDKMAN! 是一个用于管理多个软件开发工具包版本的工具,特别适合需要在不同 Java 版本之间切换的开发者和服务器管理员。
什么是 SDKMAN!
Section titled “什么是 SDKMAN!”SDKMAN! (Software Development Kit Manager) 可以让你:
- 安装多个 Java 版本
- 在不同版本间快速切换
- 自动管理环境变量
- 支持多种 JDK 发行版
安装 SDKMAN!
Section titled “安装 SDKMAN!”Linux / macOS / WSL
Section titled “Linux / macOS / WSL”打开终端,执行以下命令:
curl -s "https://get.sdkman.io" | bash安装完成后,重新打开终端或执行:
source "$HOME/.sdkman/bin/sdkman-init.sh"Windows
Section titled “Windows”SDKMAN! 原生不支持 Windows,但可以通过以下方式使用:
- WSL (推荐): 在 Windows Subsystem for Linux 中安装
- Git Bash: 在 Git Bash 中安装 (可能不稳定)
sdk version如果显示版本信息,说明安装成功。
查看可用的 Java 版本
Section titled “查看可用的 Java 版本”sdk list java会显示所有可用的 Java 版本和发行版:
================================================================================Available Java Versions for Linux 64bit================================================================================ Vendor | Use | Version | Dist | Status | Identifier-------------------------------------------------------------------------------- Corretto | | 21.0.1 | amzn | | 21.0.1-amzn | | 17.0.9 | amzn | | 17.0.9-amzn | | 11.0.21 | amzn | | 11.0.21-amzn | | 8.0.392 | amzn | | 8.0.392-amzn Dragonwell | | 21.0.1 | albba | | 21.0.1-albba | | 17.0.9 | albba | | 17.0.9-albba | | 11.0.21 | albba | | 11.0.21-albba | | 8.0.392 | albba | | 8.0.392-albba GraalVM CE | | 21.0.1 | graalce | | 21.0.1-graalce | | 17.0.9 | graalce | | 17.0.9-graalce Oracle | | 21.0.1 | oracle | | 21.0.1-oracle | | 17.0.9 | oracle | | 17.0.9-oracle Temurin | | 21.0.1 | tem | | 21.0.1-tem | | 17.0.9 | tem | | 17.0.9-tem | | 11.0.21 | tem | | 11.0.21-tem | | 8.0.392 | tem | | 8.0.392-tem Zulu | | 21.0.1 | zulu | | 21.0.1-zulu | | 17.0.9 | zulu | | 17.0.9-zulu | | 11.0.21 | zulu | | 11.0.21-zulu | | 8.0.392 | zulu | | 8.0.392-zulu================================================================================安装 Java
Section titled “安装 Java”安装特定版本的 Java:
# 安装 Java 21 (Temurin)sdk install java 21.0.1-tem
# 安装 Java 17 (Azul Zulu)sdk install java 17.0.9-zulu
# 安装 Java 11 (Dragonwell)sdk install java 11.0.21-albba
# 安装 Java 8 (Corretto)sdk install java 8.0.392-amzn切换 Java 版本
Section titled “切换 Java 版本”临时切换 (当前会话)
Section titled “临时切换 (当前会话)”sdk use java 21.0.1-tem永久切换 (默认版本)
Section titled “永久切换 (默认版本)”sdk default java 21.0.1-tem查看已安装的版本
Section titled “查看已安装的版本”sdk list java | grep installed或者:
sdk current java卸载 Java 版本
Section titled “卸载 Java 版本”sdk uninstall java 17.0.9-zulu实际应用场景
Section titled “实际应用场景”场景一:多版本服务器管理
Section titled “场景一:多版本服务器管理”假设你有以下服务器:
- 1.20.4 服务器需要 Java 21
- 1.18.2 服务器需要 Java 17
- 1.12.2 服务器需要 Java 8
# 为 1.20.4 服务器设置 Java 21cd /path/to/1.20.4-serversdk use java 21.0.1-temjava -jar server.jar
# 为 1.18.2 服务器设置 Java 17cd /path/to/1.18.2-serversdk use java 17.0.9-zulujava -jar server.jar
# 为 1.12.2 服务器设置 Java 8cd /path/to/1.12.2-serversdk use java 8.0.392-amznjava -jar server.jar场景二:启动脚本中指定版本
Section titled “场景二:启动脚本中指定版本”创建启动脚本时可以指定 Java 版本:
#!/bin/bash
# 设置 Java 版本export SDKMAN_DIR="$HOME/.sdkman"source "$SDKMAN_DIR/bin/sdkman-init.sh"sdk use java 21.0.1-tem
# 启动服务器java -Xmx4G -Xms4G -jar server.jar nogui| 命令 | 说明 |
|---|---|
sdk list java | 查看所有可用的 Java 版本 |
sdk install java <version> | 安装指定版本的 Java |
sdk use java <version> | 临时切换到指定版本 |
sdk default java <version> | 设置默认 Java 版本 |
sdk current java | 查看当前使用的 Java 版本 |
sdk uninstall java <version> | 卸载指定版本的 Java |
sdk upgrade java | 升级所有已安装的 Java 版本 |
sdk flush | 清理缓存 |
如果提示 sdk: command not found:
source "$HOME/.sdkman/bin/sdkman-init.sh"版本切换不生效
Section titled “版本切换不生效”确保在正确的终端会话中执行命令,或使用 sdk default 设置全局默认版本。
如果下载速度慢,可以尝试:
# 使用国内镜像的 JDK 发行版 (如 Dragonwell)sdk install java 21.0.1-albba