能,sdkman在linux上安装并切换jdk 17和21只需三步:安装sdkman并初始化、用sdk install分别安装两个版本(如17.0.14-tem和21.0.4-tem)、通过sdk use临时切换或sdk default设为全局默认,所有操作仅影响当前shell环境,安全可逆。

用 SDKMAN 在 Linux 上安装并切换 JDK 17 和 JDK 21 很直接,核心就三步:装 SDKMAN、装两个 JDK、按需切换。它不改系统级配置,所有操作只影响当前 shell 环境,安全、干净、可逆。
安装 SDKMAN 并初始化
确保系统已装好 curl、zip、unzip 和 sed(多数发行版默认带,缺的话用 sudo apt install curl zip unzip sed 或 sudo yum install curl zip unzip sed 补齐)。
执行安装命令:
curl -s "https://get.sdkman.io" | bash- 运行完后,执行
source "$HOME/.sdkman/bin/sdkman-init.sh" - 为避免每次新开终端都手动 source,把这行加到
~/.zshrc或~/.bashrc末尾:echo 'source "$HOME/.sdkman/bin/sdkman-init.sh"' >> ~/.zshrc - 然后重载配置:
source ~/.zshrc - 验证:
sdk version应输出版本号,sdk list java能列出大量候选版本
安装 JDK 17 和 JDK 21
用 sdk list java 查看可用版本,推荐选带 tem(Eclipse Temurin)、zulu(Azul)或 corretto(Amazon)标识的 LTS 版本,比如:
- JDK 17:
sdk install java 17.0.14-tem - JDK 21:
sdk install java 21.0.4-tem
安装过程自动解压到 ~/.sdkman/candidates/java/ 下独立子目录,互不干扰。装完会提示是否设为默认,先不用管。
切换 JDK 版本
切换分两种场景:
-
临时切换(仅当前终端生效):
sdk use java 17.0.14-tem或sdk use java 21.0.4-tem
执行后立即生效,java -version和javac -version都会同步更新,Maven、Gradle 也能识别 -
设为默认(新打开的终端也生效):
sdk default java 21.0.4-tem
这样以后所有新终端启动时自动用 JDK 21;想换回 JDK 17,就再执行sdk default java 17.0.14-tem
随时查当前用的是哪个:sdk current java;看安装路径:sdk home java。
常见问题处理
如果 sdk use 后 java -version 没变:
- 确认终端是交互式 shell(VS Code 内置终端、IDE 启动的终端有时不读
.zshrc,可手动执行一次sdk use) - 检查
$JAVA_HOME和$PATH是否被其他脚本覆盖:echo $JAVA_HOME和which java应指向~/.sdkman/candidates/java/xxx/bin/java - 极少数情况 PATH 顺序错乱,可临时修复:
export PATH="$JAVA_HOME/bin:$PATH"











