SDKMAN vs jEnv vs JetTUI,JDK 版本管理到底选哪个
三个工具,三种哲学。SDKMAN 管得宽,jEnv 管得细,JetTUI 管得全。选哪个,看你是什么人。
一、你为什么需要 JDK 版本管理
先确认一下,你是不是这样的人:
电脑里装了 JDK 8、JDK 11、JDK 17、JDK 21。老项目用 8,新项目用 17,尝鲜的用 21。Maven 也是,3.6 和 3.9 并存。
每天在项目间切来切去,JAVA_HOME 改了又改,PATH 乱了又乱。编译报错一看,版本不对。改完重启终端,又报错,还是不对。
你不是一个人。 全中国的 Java 开发者,有一半的时间花在切版本上。
今天把市面上三个主流的 JDK 版本管理工具摆一起比一比:SDKMAN、jEnv、JetTUI。看完你就知道该选哪个。
二、三个工具,各自是什么
SDKMAN:老牌全能选手
SDKMAN 诞生于 2013 年左右,是类 Unix 平台上最知名的 SDK 版本管理工具。
它能管的不只是 JDK。 Go、Maven、Gradle、Kotlin、Scala、Groovy------你能想到的 JVM 生态工具,它基本都能装、能切、能卸。
核心命令长这样:
bash
sdk list java # 列出所有可装的 JDK
sdk install java 17.0.8-tem # 装 JDK 17
sdk use java 17.0.8-tem # 当前 shell 切到 17
sdk default java 17.0.8-tem # 设为默认
特点:自己帮你下载安装。 你不用自己去 Oracle 官网下 JDK,SDKMAN 帮你从源站拉。装完自动配置 JAVA_HOME 和 PATH。
jEnv:轻量切换专家
jEnv 比 SDKMAN 更聚焦。它只管 JDK,不管别的。 而且它不帮你下载 JDK------你自己装好,它只负责"切"。
核心命令:
bash
jenv add /usr/lib/jvm/java-17-openjdk # 把已装的 JDK 加进来
jenv global 17 # 设全局版本
jenv local 17 # 当前目录用 17
jenv shell 17 # 当前 shell 用 17
特点:三层粒度。 全局、目录级、Shell 级,想切到多细就切到多细。进到某个项目目录,自动切到那个项目要的 JDK 版本。
原理是 shim(垫片)机制:jEnv 在 PATH 里插一层自己的拦截器,每次调用 java 时先判断该用哪个版本,再转发到对应的 JDK。
JetTUI:终端工具箱里的环境切换
JetTUI 不只是版本管理工具,它是个 Java 开发者的终端仪表盘。版本切换是 F4 这个 Tab 的功能。
操作方式:
- 按
F4进环境切换 Tab - 输入 JDK 或 Maven 的 home 目录路径
- 点 Activate
特点:GUI 操作 + 永久写入环境变量。 它不帮你下载 JDK,你自己装好,告诉它路径就行。切换后当前进程立即生效,同时写到 JAVA_HOME、MAVEN_HOME、PATH 用户环境变量里,新开终端也保持。
而且 JetTUI 不只切版本------F1 启停服务、F2 编译、F3 打包,切版本只是顺手的事。
三、横向对比,逐个维度过
维度 1:平台支持
| 平台 | SDKMAN | jEnv | JetTUI |
|---|---|---|---|
| Linux | 原生支持 | 原生支持 | 支持 |
| macOS | 原生支持 | 原生支持 | 支持 |
| Windows | 需 WSL/Git Bash | 原版需 WSL,有第三方 Windows 分支 | 原生支持 |
这是 JetTUI 最大的差异点。 SDKMAN 和 jEnv 都是为类 Unix 设计的,Windows 用户要么装 WSL,要么用第三方移植版,体验打折扣。JetTUI 在 Windows 上原生跑,环境变量直接写系统。
如果你的主力机是 Windows,这一项就能筛掉两个。
维度 2:操作方式
| 维度 | SDKMAN | jEnv | JetTUI |
|---|---|---|---|
| 交互方式 | 纯命令行 | 纯命令行 | TUI 图形界面 + 鼠标点击 |
| 学习成本 | 中等,要记命令 | 中等,要记命令 | 极低,输入路径点按钮 |
SDKMAN 和 jEnv 都是命令行工具,你得记住 sdk use、jenv local 这些命令。用多了自然熟,但对新手有门槛。
JetTUI 是 TUI,有按钮、有列表、有输入框。鼠标点就能操作,不记快捷键也行。
维度 3:版本切换粒度
| 粒度 | SDKMAN | jEnv | JetTUI |
|---|---|---|---|
| 全局默认 | 支持 | 支持 | 支持 |
| 当前 Shell | 支持 | 支持 | 支持(当前进程) |
| 目录级自动切换 | 不支持 | 支持 | 不支持 |
这是 jEnv 的杀手锏。 jenv local 17 会在当前目录创建 .java-version 文件,以后进这个目录自动切到 17。SDKMAN 和 JetTUI 没有这个功能,得手动切。
如果你有很多项目,每个要不同 JDK,jEnv 的目录级切换确实省心。
维度 4:SDK 下载安装
| 能力 | SDKMAN | jEnv | JetTUI |
|---|---|---|---|
| 帮你下载 JDK | 支持 | 不支持 | 不支持 |
| 帮你下载 Maven | 支持 | 不支持 | 不支持 |
| 管理非 JVM 工具 | 支持(Go、Gradle 等) | 不支持 | 不支持 |
SDKMAN 在这一项碾压。 它有自己的源站,一条命令下载安装,不用自己去官网找包。jEnv 和 JetTUI 都要求你自己装好 JDK,它们只管"切"。
如果你经常需要试不同版本的 JDK,SDKMAN 装起来最方便。
维度 5:切换持久化
| 维度 | SDKMAN | jEnv | JetTUI |
|---|---|---|---|
| 当前 Shell 生效 | 是 | 是 | 是 |
| 写入系统环境变量 | 通过 sdk default |
通过 jenv global |
直接写 JAVA_HOME / PATH |
| 新终端保持 | 是 | 是 | 是 |
三个都能持久化,但方式不同。SDKMAN 和 jEnv 通过自己的机制管理,JetTUI 直接写 Windows 用户环境变量。
维度 6:附加能力
| 能力 | SDKMAN | jEnv | JetTUI |
|---|---|---|---|
| 编译项目 | 无 | 无 | F2 mvn install |
| 启停 Spring Boot 服务 | 无 | 无 | F1 服务管理 + 独立日志 |
| 打包 | 无 | 无 | F3 mvn package |
| JDWP 调试 | 无 | 无 | 自动分配端口 |
| 管理 Maven 版本 | 支持 | 不支持 | 支持(F4) |
JetTUI 在这一项碾压。 SDKMAN 和 jEnv 只管版本切换,切完之后你还得自己开终端编译、启动服务、打包。JetTUI 把这些全收进一个界面了。
四、三个工具,三种哲学
对比完了,说点本质的。
SDKMAN 的哲学是"我来帮你搞定"。 下载、安装、切换,一条龙。你不用操心 JDK 从哪下、装哪去。代价是它只支持类 Unix,Windows 用户用不了原生版。
jEnv 的哲学是"我只管切,别的你自理"。 你自己装 JDK,我帮你切版本。切得还特别细------全局、目录、Shell 三层粒度。代价是功能单一,编译启停打包跟我无关。
JetTUI 的哲学是"切版本只是顺手的事"。 你本来就要编译、启动服务、打包,切版本是其中一环。F4 夹在 F1 F2 F3 中间,用的时候按一下,不用的时候不碍事。代价是不帮你下载 JDK,目录级自动切换还没有。
五、你该选哪个
别纠结了,对号入座。
你是 macOS / Linux 用户,经常试新版本 JDK → 选 SDKMAN
下载安装一条龙,sdk install java 21.0.2-tem 就完事。不用自己去官网找包。
你有很多项目,每个要不同 JDK,想进目录自动切 → 选 jEnv
jenv local 17 一次设置,以后进这个目录自动切。不用每次手动切。
你是 Windows 用户,受够了改环境变量 → 选 JetTUI
原生支持 Windows,输入路径点按钮,环境变量直接写好。还能顺便编译、启停、打包。
你三个都想要 → 可以组合用
SDKMAN 装 JDK + jEnv 管目录级切换 + JetTUI 管编译启停。三者不冲突,各管各的。
但说实话,大多数人只需要一个。选那个最贴合你痛点的就行。
六、一张表收尾
| 维度 | SDKMAN | jEnv | JetTUI |
|---|---|---|---|
| 平台 | Unix 系 | Unix 系 | Windows 原生 |
| 操作 | 命令行 | 命令行 | TUI 鼠标 |
| 下载安装 JDK | 支持 | 不支持 | 不支持 |
| 目录级自动切换 | 不支持 | 支持 | 不支持 |
| 切 Maven 版本 | 支持 | 不支持 | 支持 |
| 编译启停打包 | 无 | 无 | 全有 |
| 持久化 | 支持 | 支持 | 写系统环境变量 |
| 管理非 JVM 工具 | 支持 | 不支持 | 不支持 |
| 学习成本 | 中 | 中 | 低 |
没有最好的工具,只有最合适的工具。 你的平台、你的习惯、你的需求,决定你选哪个。
SDKMAN 官网 :sdkman.io
jEnv 官网 :www.jenv.be
JetTUI 项目地址 :github.com/GengMS/JetT...
JetTUI 在线演示 :gengms.github.io/JetTUI
公众号 :极客悟道
你在用哪个?评论区聊聊。