还在手动切换 JDK 版本?这款 Go 写的 Java 版本管理器,真香!
前言
作为一个 Java 开发者,你是否经常遇到这些场景:
- 公司老项目用的 JDK 8,新项目用的 JDK 21,每次都要手动改
JAVA_HOME,改完还要重启 IDEA - 想试试不同厂商的 OpenJDK(Temurin、Corretto、Dragonwell),结果每个都要去官网下载、解压、配置
- 在国内下载 JDK,速度慢到怀疑人生,翻墙又不稳定
- Maven 和 Gradle 的代理配置要分开设置,配置文件找半天
之前用过的 sdkman、jenv 等工具或多或少都有点问题——有的依赖 shell、Windows 下体验差,有的不支持多镜像加速,有的配置太复杂。直到发现了 jgo 这个项目,四个字:相见恨晚。
快速跳转 -> 快速上手
项目简介
jgo 是一个用 Go 语言编写的 Java 版本管理器(JDK Version Manager),功能类似于 Node.js 的 nvm 或 Python 的 pyenv,专为 Java 开发者设计。
- GitHub 链接:查看仓库
- 开源协议:MIT
- 支持平台:Windows / Linux / macOS,x64 / arm64
与其他工具对比
| 特性 | jgo | sdkman | jenv | Windows 手动配置 |
|---|---|---|---|---|
| Windows 原生支持 | ✅ | ❌(依赖 bash) | ❌ | ✅ |
| 多源 JDK | 4个主流源 | 较少 | 需自行添加 | 手动下载 |
| 镜像加速 | 内置可插件化 | ❌ | ❌ | 手动操作 |
| 环境变量自动修改 | ✅ 系统级 | ✅ shell 级 | ✅ shell 级 | ✅ 手动 |
| Gradle/Maven 集成 | ✅ | ❌ | ❌ | ❌ |
| 本地 JDK 导入 | ✅ | ✅ | ❌ | 手动解压 |
| 代理管理(全局+临时) | ✅ | ❌ | ❌ | 各自配置 |
核心功能一览
1. 多源 JDK 下载,一键安装
jgo 对接了四个主流 OpenJDK 发行版:
| 厂商 | 发行版 | 特点 |
|---|---|---|
| Alibaba | Dragonwell | 阿里云优化,兼容性好 |
| Amazon | Corretto | AWS 出品,长期支持 |
| Azul | Zulu | 版本覆盖广,商业支持 |
| Eclipse | Temurin (Adoptium) | 前身是 AdoptOpenJDK,社区活跃 |
安装 JDK 21 只需要一行命令:
jgo install 21
它会列出所有源的可用版本,交互选择后自动下载、解压、配置。再也不用去官网找下载链接了。
2. 一键切换 JDK 版本
这个功能是最常用的。jgo use 会直接修改系统级的 JAVA_HOME 和 PATH 环境变量,切换后立刻生效:
jgo use 21 # 切换到 JDK 21(版本号匹配)
jgo use Corretto-17 # 精确名称匹配
jgo use # 交互式选择
看着输出结果,亮哥只想说一句:比手动改环境变量不知道快了多少倍。
3. 镜像加速,告别龟速下载
国内开发者最头疼的事之一就是下载速度。jgo 内置了 镜像插件系统,当前已支持清华 TUNA 镜像对 Temurin 源的加速:
jgo mirror Temurin tsinghua # 开启清华镜像
jgo mirror # 查看当前镜像配置
jgo mirror Temurin none # 关闭镜像
4. 构建工具统一管理
jgo 不光管 JDK,还能统一管理 Gradle 和 Maven 的代理和路径:
# Gradle 代理配置
jgo gradle proxy http://127.0.0.1:7890
jgo proxy user:pass@host:port # 带认证的代理
# Maven 代理配置
jgo maven proxy http://127.0.0.1:7890
# 查看/设置 gradle/maven 路径
jgo gradle path ~/.gradle
jgo maven path /opt/maven
代理配置会自动写入 ~/.gradle/gradle.properties 或 ~/.m2/settings.xml,省去了手动编辑配置文件的麻烦。
5. 本地 JDK 导入
如果你已经有 JDK 安装包(zip 或 tar.gz),也可以通过 jgo add 快速导入:
jgo add ./downloads/openjdk-21_linux-x64_bin.tar.gz
工具会自动检测版本号,提示你输入一个易于识别的目录名。
6. 源连通性测试
不知道哪个源下载快?sourcetest 帮你测:
jgo sourcetest
它会对所有已配置的 JDK 源(和镜像)发起 HTTP 请求,返回每个源的响应时间和状态,帮你选择最快的下载通道。
快速上手指南
安装
方式一:下载
- 在 Github releases页 下载你所用的版本
- 解压
- 把它放进 Path
方式二:从源码编译
git clone https://github.com/yourname/jgo.git
cd jgo
make build # 输出到 bin/jgo
配置流程
刚安装完,建议按这个顺序配一下:
# 1. 查看默认存储位置
jgo root # 默认 ~/.jgo/jdks
# 2. 如果需要改位置
jgo root /opt/my-jdks
# 3. 配置代理(如果公司网络需要)
jgo proxy http://proxy.company.com:8080
# 4. 开启国内镜像(可选,强烈建议)
jgo mirror Temurin tsinghua
# 5. 测试一下连通性
jgo sourcetest
# 6. 安装 JDK
jgo install 21
整个配置过程不到两分钟,比手动配环境变量舒服多了。
日常高频用法
jgo list # 查看已安装的 JDK
jgo list available # 查看所有可下载的版本
jgo use Temurin-21 # 切换版本
技术亮点
从源码角度看,jgo 的设计有几个值得关注的地方:
-
Provider 层抽象:每个 JDK 源(Alibaba、Amazon、Azul、Eclipse)都实现
Provider接口,统一了查询列表和下载链接的方式,新增源只需要加一个文件。 -
Mirror 插件机制:通过接口 +
init()自注册实现了插件化,不需要修改主逻辑就能扩展镜像源。插件模式在 Go 项目中值得学习。 -
跨平台环境变量操作:
internal/env/下针对 Windows 和其他平台分别实现,Windows 通过注册表设置系统级环境变量,Unix 通过 shell 配置文件。 -
零外部依赖:编译出来的二进制只有
jgo本身,不需要安装任何运行时或依赖库。
总结
jgo 解决的痛点很明确——让 Java 开发者不再在 JDK 版本切换和配置上浪费时间。它的优势在于:
- 纯 Go 编写,跨平台体验一致,Windows 用户友好
- 命令简单直观,学习成本极低
- 4 个主流 JDK 源 + 镜像插件,覆盖国内下载场景
- Gradle / Maven 集成是差异化亮点,市面上没几个工具做这个
项目本身代码结构也很干净,适合 Go 新手读一读源码,理解 CLI 工具和多源适配器的设计模式。
如果你深受 JDK 版本管理的折磨,去 GitHub 上搜一下 jgo,试试看。用了回不来的那种。
更多推荐

所有评论(0)