wsl2 jdk管理工具之sdkman

前言

windows下安装多个jdk,Idea可以配置不同jdk版本,WSL2下如何实现。

SDKMAN 使用小结

WSL 下管理多版本 JDK 的实操记录。


一、为什么用 SDKMAN?

在 WSL 里开发 Java 项目,经常遇到不同项目需要不同 JDK 版本的情况。系统包管理器(apt)装 JDK 只能装一个版本,换版本很麻烦。SDKMAN 解决的就是这个问题:多版本安装 + 一键切换

本质上和 Windows 下装多个 JDK、IDEA 里选一个用,是一回事。


二、安装

bash 复制代码
curl -s "https://get.sdkman.io" | bash
source "$HOME/.sdkman/bin/sdkman-init.sh"

装完验证:sdk version

命令持久化:

bash 复制代码
echo 'export SDKMAN_DIR="$HOME/.sdkman"' >> ~/.bashrc
echo '[[ -s "$HOME/.sdkman/bin/sdkman-init.sh" ]] && source "$HOME/.sdkman/bin/sdkman-init.sh"' >> ~/.bashrc
source ~/.bashrc
# 新开一个 WSL 终端
sdk version
# 能正常输出版本号

三、常用命令

命令 作用
sdk list java 查看所有可用版本
`sdk list java grep installed`
sdk install java 17.0.13-tem 安装指定版本
sdk uninstall java 17.0.13-tem 卸载
sdk use java 17.0.13-tem 当前终端临时切换
sdk default java 17.0.13-tem 设置默认版本
sdk current java 查看当前使用的版本
sdk home java 17.0.13-tem 查看安装路径

四、安装目录

所有版本都装在同一个目录下:

bash 复制代码
~/.sdkman/candidates/java/

目录结构:

复制代码
~/.sdkman/candidates/java/
├── 11.0.31-tem/
├── 17.0.19-tem/
├── 8.0.472-amzn/
└── current -> 17.0.19-tem   # 软链接,指向当前默认版本

current 是个软链接,指向你 sdk default 设置的版本。


五、和 IDEA 配合使用

在 IDEA 中配置 JDK 时,路径写:

复制代码
\\wsl.localhost\Ubuntu\home\你的用户名\.sdkman\candidates\java\17.0.19-tem

注意:.sdkman 是隐藏目录,IDEA 文件选择器里默认看不到。按 Ctrl+H(Windows/Linux)或 Cmd+Shift+.(macOS)显示隐藏文件夹。

一个项目一个版本,互不干扰。 和 Windows 下用 IDEA 选 JDK 完全一样。


六、两个坑

坑一:sdk default 报错

复制代码
Stop! Candidate version is not installed.
Tip: Run the following to install this version
$ sdk install java 25.0.3-tem

说明之前设置过默认版本,但那个版本被卸载了,默认指向了一个不存在的版本。

解决方法:

bash 复制代码
# 重新指向一个已安装的版本
sdk default java 17.0.19-tem

# 或者直接编辑配置文件
echo 'sdkman_default_java=17.0.19-tem' >> ~/.sdkman/etc/config

坑二:java -versionsdk current java 不一致

java -version 显示一个版本,sdk current java 显示另一个或提示 Not using any version of java

原因:PATH 里先找到了系统装的 JDK/usr/lib/jvm/ 下的),优先级高于 SDKMAN。

解决方法:

bash 复制代码
# 确认 SDKMAN 是否已初始化
source ~/.sdkman/bin/sdkman-init.sh

# 设置默认版本
sdk default java 17.0.19-tem

# 检查 which java 指向哪里
which java
# 应该指向 /home/xxx/.sdkman/candidates/java/current/bin/java

七、清理系统 JDK(可选)

如果想彻底只用 SDKMAN,可以把系统 APT 安装的 JDK 卸掉:

bash 复制代码
# 确认包名
dpkg -l | grep openjdk

# 卸载
sudo apt purge openjdk-17-jdk

# 清理残留软链接
sudo rm -f /usr/bin/java /usr/bin/javac
hash -r

完成后 which java 应该指向 SDKMAN 目录。


八、总结

场景 命令
查看已装版本 ls ~/.sdkman/candidates/java/
查看当前默认版本 sdk current java
切换默认版本 sdk default java 版本号
临时切换 sdk use java 版本号
IDEA 配置路径 \\wsl.localhost\Ubuntu\home\xxx\.sdkman\candidates\java\版本号

核心逻辑:SDKMAN 就是个多版本管理器,装、删、切三板斧够用了。剩下的就是让 IDEA 能正确找到这些版本。

相关推荐
mct1234 小时前
c++ iconv 字符utf-8转换gb2312失败
开发语言·c++
龙虾PRO5 小时前
能源与股票量化核心差异,AI全链路落地实操手册
java·面试·职场和发展
Marst Code5 小时前
Python 3.9 已停止维护!从 3.9 到 3.14 全版本深度对比,生产环境该选哪个?
开发语言·python
llwszx5 小时前
【Java/Go后端手撸原生Agent(第九篇):Plan-and-Execute规划模式——从“走一步看一步“到“先谋后动“】
java·python·golang·agent开发·plan模式·规划执行模式
ZJH__GO5 小时前
网络编程v2--多客户端互通
java·运维·服务器·开发语言·计算机网络
霸道流氓气质6 小时前
SpringBoot中基于 AES-GCM + KMS 密钥管理的数据加解密 Starter 实践
java·数据库·spring boot
Gofarlic_OMS6 小时前
NX浮动许可调度黑名单机制,对比两款谁更合理
java·大数据·运维·开源·制造
万岳科技系统开发6 小时前
智慧医院小程序开发推动医疗服务流程全面线上化
大数据·开发语言·人工智能
一只小灿灿6 小时前
C++ 修饰符全面详解
开发语言·c++
马里马里奥-6 小时前
从零搭建AI Agent工具链的技术文章大纲
开发语言·qt