JDM:一款Windows 上的 JDK 版本管理工具

0 阅读4分钟

JDM:一款Windows 上的 JDK 版本管理工具

为什么做这个工具

在 Windows 系统进行 Java 多项目开发时,常会遇到不同项目需要不同 JDK 版本的情况。传统解决方案需要手动修改 JAVA_HOME 环境变量,每次变更后还需重启终端才能生效,版本管理效率较低。

作为一名 Java 开发工程师,受 nvm 工具启发,借助 AI 编程辅助工具,我开发了 JDM(JDK Version Manager)。这款工具专为解决 JDK 版本管理问题而设计,旨在简化 JDK 的安装和版本切换流程。

项目地址:Gitee · GitHub


它能做什么

安装 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(默认模板)
  • 下载和解压有实时进度条

目前的不足

这个项目还在早期阶段,有一些能力还不具备或在规划中:

已知的局限

  1. 仅支持 Windows — 目前只做了 Windows 版本,macOS 和 Linux 暂不支持
  2. 仅支持 Temurin 发行版 — 目前只对接了 Adoptium API,不支持 Oracle JDK、Amazon Corretto、Zulu 等其他发行版
  3. Shell 集成需要手动配置 — 新终端不会自动设置 JAVA_HOME,需要在 $PROFILE 中手动添加集成代码
  4. 没有自动更新功能 — JDM 自身更新需要手动下载新版本替换
  5. jdm local 命令尚未实现 — 项目级版本锁定(类似 .java-version 文件)功能预留了命令,但还没有具体实现
  6. 没有卸载残留清理jdm uninstall 只删除 JDK 文件,不会清理相关的别名和配置引用
  7. 没有离线安装能力 — 必须联网从镜像源下载,不支持导入本地已有的 JDK 安装包
  8. 版本检测不够完善 — 切换版本后没有自动验证 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。