JDM:一款Windows 上的 JDK 版本管理工具
为什么做这个工具
在 Windows 系统进行 Java 多项目开发时,常会遇到不同项目需要不同 JDK 版本的情况。传统解决方案需要手动修改 JAVA_HOME 环境变量,每次变更后还需重启终端才能生效,版本管理效率较低。
作为一名 Java 开发工程师,受 nvm 工具启发,借助 AI 编程辅助工具,我开发了 JDM(JDK Version Manager)。这款工具专为解决 JDK 版本管理问题而设计,旨在简化 JDK 的安装和版本切换流程。
它能做什么
安装 JDK
jdm install 17 # 安装 JDK 17 最新版
jdm install 17.0.2+2 # 安装指定构建版本
JDM 对接 Adoptium API,可以从镜像源下载 Temurin JDK。输入大版本号会自动匹配该系列的最新版本,也可以指定精确的构建号。
切换版本
jdm use 17 # 当前终端切换到 JDK 17
jdm default 17 # 设置全局默认版本
切换基于符号链接(Symlink)实现。~/.jdm/current 指向当前激活的 JDK 目录,用户只需把 ~/.jdm/current\bin 放在 PATH 前面。切换时只更新符号链接,不需要修改环境变量,所以不需要重启终端。
如果符号链接创建失败(比如没开开发者模式),会自动回退到目录联接(Junction),不需要管理员权限。
查看版本
jdm ls # 列出本地已安装的版本
jdm ls-remote # 列出远程可用版本
jdm ls-remote 17 # 只看 JDK 17 的版本
jdm current # 查看当前使用的版本
远程列表会自动标注 LTS 版本。
别名管理
jdm alias set prod 17.0.2+2
jdm alias list
jdm alias del prod
给长版本号起个短名字,切换时直接用别名。
卸载
jdm uninstall 17
配置管理
jdm config list # 查看所有配置
jdm config get mirror # 查看镜像源
jdm config set mirror <url> # 设置镜像源
jdm config init # 初始化配置文件
支持配置 Adoptium API 镜像和 GitHub 下载代理,国内用户可以配加速源:
jdm config set download_mirror https://ghproxy.net
安装
从 Releases 页面下载安装程序 jdm-setup-*.exe,按向导完成即可。安装程序支持中英文界面,会自动配置 PATH。
也可以手动下载 jdm.exe,放到任意目录后把该目录加入 PATH。
技术实现
- Go 1.21 + Cobra CLI,编译后是单个 exe 文件,没有运行时依赖
- 符号链接切换版本,PATH 本身不需要改动
- 内置架构检测(x64 / ARM64),自动下载对应版本
- 内置 semver 解析,支持模糊匹配(
jdm install 17)和精确匹配(jdm install 17.0.2+2) - 双层配置:
~/.jdm/config.json(用户配置)覆盖<exe-dir>/config.json(默认模板) - 下载和解压有实时进度条
目前的不足
这个项目还在早期阶段,有一些能力还不具备或在规划中:
已知的局限
- 仅支持 Windows — 目前只做了 Windows 版本,macOS 和 Linux 暂不支持
- 仅支持 Temurin 发行版 — 目前只对接了 Adoptium API,不支持 Oracle JDK、Amazon Corretto、Zulu 等其他发行版
- Shell 集成需要手动配置 — 新终端不会自动设置
JAVA_HOME,需要在$PROFILE中手动添加集成代码 - 没有自动更新功能 — JDM 自身更新需要手动下载新版本替换
jdm local命令尚未实现 — 项目级版本锁定(类似.java-version文件)功能预留了命令,但还没有具体实现- 没有卸载残留清理 —
jdm uninstall只删除 JDK 文件,不会清理相关的别名和配置引用 - 没有离线安装能力 — 必须联网从镜像源下载,不支持导入本地已有的 JDK 安装包
- 版本检测不够完善 — 切换版本后没有自动验证
java -version是否真正生效
规划中的功能
- 支持更多 JDK 发行版(Corretto、Zulu、Oracle 等)
- Shell 集成自动化(新终端自动识别当前版本)
.java-version文件支持(进入项目目录自动切换)- JDM 自更新
- 本地 JDK 导入(已有手动安装的 JDK 可以导入到 JDM 管理)
适合谁用
- 在 Windows 上开发,需要频繁切换 JDK 版本
- 同时维护多个不同 JDK 版本的项目
- 想体验不同 JDK 版本特性
如果只在 Windows 上用 JDK 8 一个版本,或者已经用其他方式管理得很好,可能不太需要这个工具。
反馈和贡献
项目开源在 Gitee 和 GitHub,MIT 许可证。如果遇到 bug 或有功能建议,可以提 Issue。代码用 Go 编写,结构比较简单,也欢迎 PR。