自荐一个我自己造的轮子:sdkm —— 用 Rust 写的跨平台 SDK 版本管理器
大家好,不知道你们是不是也这样:每次装个 JDK、Node、Python,流程都是熟的——下载、解压、找个目录放好,然后去系统里手动改 JAVA_HOME,CLASSPATH、PATH、NODE_HOME,改完重开终端验证一下,生怕改错把别的x项目搞挂起不来。一个版本就还好,多版本共存的时候就头大:老项目要 Java 8、新项目要 Java 21,今天切这个明天切那个,每次都得去环境变量里把路径换来换去,烦都要烦死了。
几乎每次换环境都的自己来一遍,前段时间配新机器配到一半,突然就想:都 2026 年了,为什么这事还得我手动干?我之前也试过 jvms,sdkman这样类似的工具,要么是有诡异的报错,要么是windows不友好压根用不了。
于是用 Rust 自己写了一个:sdkm,专门解决「装 + 切 + 配环境变量」这一整套。
它怎么把这事变简单的
我就不罗列所有功能了,挑几个我自己用着最爽的讲:
装完就配好,不用碰环境变量
sdkm install java 21 一条命令:下载、解压、放目录、建符号链接、写 PATH、设环境变量全自动搞定。Windows 体验也很好,已经开着的程序也能感知到新版本,不用重开终端。
切版本就是一条命令,而且全局生效
sdkm switch java 17 之后,符号链接、系统 PATH、JAVA_HOME 同步切过去,全局持久,不像用别的方案,切完只在当前 shell生效,开个新窗口又回去了,反复拉扯。现在一条命令,哪儿都生效。
一个二进制,丢哪跑哪
你简直不敢相信 就一个 3MB 的可执行文件,没有错就3M!
没有运行时依赖。sdkm 解压后启动即它自己所在目录,完全绿色纯净,没有其他偷偷吃磁盘的操作——配置、已装的 SDK 全在旁边。我把笔记本里的 sdkm.exe 拷到台式机,连配置带已下的 JDK 一起带过去了,直接能跑。下好的 JDK 扔进 store/ 目录就托管,不用重新下一遍,这对我这种给新机器配环境的人太省事了。
出错也不怕把环境弄坏 这点是我比较在意的。每步操作都打印清楚在干嘛、为什么。切换过程中任何一步挂了,自动回滚回切换前的样子;配置文件原子写入 + 快照回滚,不会写一半留个烂摊子。
还能模糊匹配 + TUI
sdkm install java 21 它自己找最新的 21.x,不用查具体小版本号;打错了还会提示相近版本。sdkm list node -r 进一个交互界面,上下键翻远程版本,按 i 装、按 s 切,比背命令舒服。TUI操作就是非常丝滑,谁体验谁知道!
最近还加了点 AI 的活儿 2026年了,ai时代,cli天生就是给agent调用的。这么一想我就给sdkm 准备了一份给 agent 看的 skill 文档。Claude Code 之类的助手读一遍,就能直接替你装/切 SDK——退出码语义清晰,失败自动思考总结原因。我现在经常直接跟 Claude 说「装个 node 20」就完事,连命令都懒得敲,懒人福音!
技术栈选择
Rust 1.92,clap 解析参数,tokio 做异步下载,reqwest 走 HTTP,toml + serde 管配置,crossterm 着色和TUI、indicatif 画进度条。
支持 Java / Node / Python / Maven,另外任何「能从 URL 下载解压」的东西都能一行命令注册成自定义 SDK, 任何本地sdk都能交给sdkm管理,它来负责切换!
🔗 项目在这:https://github.com/borenchan/sdkmate (顺手点个 ⭐️ 就更好了,给人继续磨的动力)
最后想问大家一句:你们平时装 SDK、切版本、配环境变量,都踩过什么坑吗。如果有对项目贡献,建议,问题反馈也都欢迎大家来提issues。
Ext Link: https://github.com/borenchan/sdkmate
评论区
写评论我一般用,devshell/flake,看情况 devenv