SDKMAN vs jEnv vs JetTUI,JDK 版本管理到底选哪个

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_HOMEPATH

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 的功能。

操作方式:

  1. F4 进环境切换 Tab
  2. 输入 JDK 或 Maven 的 home 目录路径
  3. 点 Activate

特点:GUI 操作 + 永久写入环境变量。 它不帮你下载 JDK,你自己装好,告诉它路径就行。切换后当前进程立即生效,同时写到 JAVA_HOMEMAVEN_HOMEPATH 用户环境变量里,新开终端也保持。

而且 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 usejenv 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

公众号 :极客悟道

你在用哪个?评论区聊聊。

相关推荐
神经蛙199615 小时前
🌍 别再硬编码中文了!Python Web 项目国际化(i18n)完全指南
后端·python
二月龙15 小时前
Spring 事务失效的 8 种场景,很多老手依然频繁踩雷
后端
掘金酱15 小时前
「TRAE Work 实战帮」征文启动!你沉淀的经验,值得被看见!
前端·人工智能·后端
长大198815 小时前
MyBatis 常见性能陷阱:N+1 查询、一级缓存踩坑解决方案
后端
用户18615580086016 小时前
MinIO Java 对接试用:从连接、上传到下载的完整示例
后端
爱勇宝16 小时前
DeepSeek V4-Flash 更新:代码与 Agent 能力全面增强
前端·后端·deepseek
长大198816 小时前
Java8 新特性到底要不要吃透?工作中高频使用的 5 个功能总结
后端
二月龙16 小时前
Spring Bean 生命周期 & 循环依赖:90% 开发者只知结论不懂原理
后端