Skip to content

Releases: BaixuanZhu/jvm

v0.14.0

Choose a tag to compare

@github-actions github-actions released this 05 Sep 07:00

修复

  • 修复 JDK 下载在连接停滞(对端不断开但不再传数据)时无限挂起的问题:下载
    增加读停滞看门狗——距最后一次收到数据超过 30 秒即中断本次尝试并自动重试
    (断点续传,已下载部分不丢)。大文件下载不设整体超时(避免慢网络误杀),
    此前半死连接会让进度条原地卡死且永不报错;重试时也会显式打印
    ⚠️ 下载中断/停滞, Xs 后重试 提示(原先静默退避)。

新增

  • jvm doctor 新增 3 项检查(11 → 14 项):配置文件(config.toml 存在但
    语法非法时显式报 ✗——此时 mirror/arch 等自定义项已静默回退默认,启动时的
    一次性警告容易错过);临时目录残留~/.jvm.tmp-extract-* 解压
    半成品,安装中断遗留、白占磁盘,doctor --fix 自动清理);下载缓存
    (信息性汇报 zip 数量/占用/未完成分片,占用大或含 .part 时附
    jvm cache clean 释放提示)。

  • jvm available 查询结果本地缓存(~/.jvm/available-cache.json,10 分钟有效):
    二次查询不再实时打全部发行版 API,大幅提速。表格形态按发行版整表缓存;
    -a / --major 分组形态按 distro@major 逐组缓存、增量复用(只重查缺失或
    过期的组,全量子版本列表这一最重查询收益最大)。查询失败的结果不落盘,
    目标架构变化(arch 配置)自动整体失效;-r / --refresh 强制绕过缓存
    直查。命中时输出会标注 ⚡ 缓存结果 一行。

  • jvm update --all [-y]:一条命令升级全部落后的 (发行版, 大版本) 组——并发
    检查与 outdated 同源,汇总打印各组升级计划后一次确认,逐组执行与单组
    update 完全相同的闭环(装新 → 条件切换 → 清理旧版)。某组失败不阻断
    其余组,末尾给出成功/未处理汇总;存在失败或跳过组时以非零码退出,供
    脚本感知。

  • Tab 补全覆盖扩展:jvm exec 补本地已装版本(仅 -- 之前的版本槽,之后让位
    给要执行的命令);available-a / -m 选项;doctor--fix / -y
    init / completionpowershell / bash 参数与 --installinstall
    仅在版本槽补 distro@ 前缀,本地 zip 路径槽让给 shell 默认文件补全。
    补全块 token 递增至 v5,升级后首次启动自动刷新老 profile 块。

v0.13.0

Choose a tag to compare

@github-actions github-actions released this 05 Sep 02:05

新增

  • 新发行版 temurin-ea(Temurin 早期访问版):跟踪尚未 GA 的大版本预览构建
    (如 jvm install temurin-ea@28 / jvm available temurin-ea),EA 大版本
    列表实时从 Adoptium API 归并(随上游滚动,无需升级 jvm)。版本形如
    28+14-ea-betaoutdated / update 对 EA 组照常工作(build 级升级)。
    清华镜像不同步 EA 构建,下载直连 GitHub release 资产。

  • 新发行版 graalvm(Oracle GraalVM,CPU LTS 线 21/25):jvm install graalvm@21 / jvm available graalvm。直连 Oracle 官方 CDN(国内可直连,
    无镜像),SHA256 走官方 .sha256 旁路校验;版本号形如 21.0.12
    官方无 Windows ARM64 构建,arch=aarch64 下会明确提示并建议改用
    temurin/microsoft。GraalVM 创新线(25iN)与 CE 不在本版范围。

  • 本地 zip 包安装:jvm install <distro@版本> <zip文件路径>(如
    jvm install temurin@21.0.5+11 D:\downloads\jdk.zip),适合内网/代理环境
    手动下载后纳管。不访问网络、不做远程校验和校验(本地文件由用户负责),
    安装后的目录命名与远程安装完全一致,use/uninstall/outdated
    命令照常工作。

  • 下载缓存:安装包 zip 以 {distro}-{版本}.zip 留存 ~/.jvm/cache/(随
    install_dir 走),卸载后重装同版本直接复用、不再重新下载(命中前先校验
    完整性,损坏/篡改自动删除重新下载)。新命令 jvm cache 查看缓存条目与
    占用,jvm cache clean 清空(含中断残留的 .zip.part)。

  • 配置文件新增 install_dir 键(环境变量 JVM_INSTALL_DIR 同效):把 JDK 安装
    数据目录(versions/)重定向到其他盘(如 D:\jdks),适合 C 盘空间紧张的
    场景。控制面(config.tomlcurrent junction、注册表 PATH/JAVA_HOME)
    留在 ~/.jvm 不动,无需任何迁移即生效;已装版本需手动搬到新目录,
    jvm doctor 检测到旧默认目录仍有版本时会给出搬迁提示。

v0.12.0

Choose a tag to compare

@github-actions github-actions released this 04 Sep 16:21

新增

  • jvm update <[distro@]大版本> [-y]:patch 升级一步到位——安装该大版本最新 patch
    (组内已有最新版则跳过下载直接进入清理)、(当前正在使用该组版本时)自动切换
    current、清理组内全部旧 patch 目录(被进程占用删不掉的跳过并提示稍后手动
    uninstall)。仅接受大版本号;jvm upgrade 仍只负责 jvm 自身更新,两者语义
    分离。jvm outdated 的升级提示同步改为引导 jvm update

  • jvm home:打印当前 JAVA_HOME 路径(~/.jvm/current,单行无装饰),与注册表
    持久化的值一致且切换版本后不变,供 CI 脚本 / IDE 配置直接引用。

修复

  • Tab 补全的子命令列表补齐 outdated / exec(引入补全时即遗漏),并新增
    update / home 的补全;jvm update <TAB> 补全本地已装版本的
    distro@大版本 形式(update 仅接受大版本号)。

变更

  • 补全块引入版本 token(jvm-completion: v1)并纳入启动自举的版本化重写:
    老用户 profile 里只有 marker 的旧补全块,下次运行 jvm 时自动重写为新内容
    (与集成块 v2 同机制),覆盖 jvm upgrade / 安装器 / 手动换便携 zip 全部
    更新途径。此前补全块只按 marker 存在性判断,内容变更后老用户需手动执行
    jvm completion <shell> --install 才能刷新。

v0.11.1

Choose a tag to compare

@github-actions github-actions released this 04 Sep 02:02

修复

  • 修复 Temurin 2026-07 CPU 起四段式版本号(如 25.0.4.1+1)下 jvm available
    显示错误版本号(25.0.4+101)、照此 jvm install 报「API 返回 404」的问题。
    根因是 Adoptium 的 semver 字段仍编码为三段(25.0.4+101.0.LTS,第 4 段被编码进
    build 号),从 semver 反推的短版本号无法反查 API;现改为直接采用 API 顶层
    release_name 字段(剥 jdk- 前缀),保证显示的版本号可安装。影响
    jvm available / available -a 展示与 jvm outdated 的远端版本号,
    老版本号(三段式)行为不变。

移除

  • 移除发版后自动向 microsoft/winget-pkgs 提交 manifest 更新 PR 的 CI job(0.10.0
    引入,因暂不发布 winget 而移除;将来要上 winget 可从 git 历史找回 workflow 配置)。

v0.11.0

Choose a tag to compare

@github-actions github-actions released this 16 Aug 04:15

新增

  • jvm exec <[distro@]版本> -- <命令>:用指定版本在子进程环境里执行命令,不动全局
    current junction(一次性多版本测试与 CI 脚本场景,如 jvm exec 17 -- mvn test)。
    无版本号时读 .jvmrc 再退到当前版本;只解析本地已装版本,不自动下载;
    java/javac 优先在该版本 bin 内解析(不依赖系统 PATH),批处理
    .bat/.cmd,如 mvn/gradlew)经 cmd.exe /c 分发,子进程退出码原样传播。
  • jvm outdated:检查已装版本 patch 更新——按(发行版, 大版本)分组并发查各
    provider 的 LatestPatch,列出可升级行(如 temurin@21 21.0.5+11 → 21.0.8+7
    并提示升级命令(不同 patch 为不同目录名,jvm install 并列安装不冲突,无需
    重装参数)。
  • jvm doctor --fix:诊断报告后对失败项执行自动修复——目录结构 / current 链接
    重建到最新已装版本(current 为非空普通目录时跳过,不删用户数据)/ JAVA_HOME /
    shell 集成与补全注入 / 用户 PATH 补 current/bin;注册表 PATH 里的旧 JDK 残留
    逐条 y/N 确认后移除(doctor --fix -y 跳过确认)。同时新增第 10 项检查
    「用户 PATH」(注册表用户 PATH 是否含 current/bin,原来只查进程 PATH)。
  • .jvmrc 目录自动切换:shell 集成脚本 v2(PowerShell 包装 prompt / bash 挂
    PROMPT_COMMAND,双层缓存,目录与 rc 未变时零开销)在 .jvmrc 变化时自动执行
    jvm use --auto —— cd 进含 .jvmrc 的目录自动切到该版本,cd 出去恢复切换前的
    手动版本(~/.jvm/auto-state 记基线,显式 jvm use 即新基线会清掉)。
    默认开启,config.tomlautoswitch = false(或 JVM_AUTOSWITCH=0)关闭;
    集成块带版本 token,老用户升级 jvm 后由启动自举自动重写 profile 拿到新钩子。

v0.10.0

Choose a tag to compare

@github-actions github-actions released this 13 Aug 03:47

新增

  • 项目级版本固定 .jvmrcjvm pin [版本] 写入当前目录的 .jvmrc
    jvm use 无参数时从当前目录逐级向上查找并读取(与 .nvmrc / .ruby-version
    一致,支持 monorepo 子目录)。文件格式为一行 [distro@]version(支持 #
    注释);版本解析链路完全复用现有 ParseVersionSpec + ResolveVersion
    指定版本未安装时报错提示 jvm install(不自动下载)。新增 internal/pinrc
    包;为把目录名转成 distro@version,导出 junction.SplitDistro
  • 新增竞态检测:make test-racego test -race ./...)本地可用,CI 每次
    push/PR 在单元测试后额外跑一遍 race,锁定 cmd 并发查询与 provider 注册表
    等路径的正确性。
  • 发版后自动向 microsoft/winget-pkgs 提交 winget manifest 更新 PR(用官方
    wingetcreate,内部自动 fork + 提 PR,双架构 x64/arm64 的 setup.exe)。需在仓库
    Secrets 配置 WINGET_PAT;首次需手动提交 BaixuanZhu.jvm 初始 manifest。

v0.9.0

Choose a tag to compare

@github-actions github-actions released this 11 Aug 05:07

新增

  • 新增 Azul Zulu (zulu@) 与 BellSoft Liberica (liberica@) 两个发行版 provider;
    两者均支持 Windows x64 / ARM64 (Zulu 走 Azul Metadata API 两步查询取官方 sha256,
    Liberica 走 BellSoft Product Discovery API + 官方 sha1)。
  • 下载校验层支持多算法: Asset 契约由 SHA256 改为 Checksum + ChecksumAlgo
    (默认 sha256), 各 provider 按发行版官方提供的哈希校验 (Liberica 用 SHA1, 其余 SHA256);
    internal/jdkfileSHA256 泛化为 fileHash(path, algo)
  • paths 支持 JVM_HOME 环境变量重定向根目录 (CI / 集成测试隔离文件副作用用); 新增
    CI workflow (.github/workflows/ci.yml): push/PR 每次跑单元测试, 每周 schedule +
    手动 workflow_dispatch 跑真实集成测试 (scripts/integration-test.sh, 全 5 发行版
    install/use/list/doctor/uninstall); Makefile 新增 test target。
  • 本地开发构建不再污染环境: make build / make run 产物经 ldflags 注入
    Bootstrap=off, 启动时不写用户 PATH / shell profile (发行风味用
    make build-dist, installer/release/dist-all 自动走它); 任何构建可用
    JVM_NO_BOOTSTRAP=1 强制关闭自举; 自身位于系统 Temp 目录 (如 go run
    临时二进制) 时亦自动跳过自举。

v0.8.0

Choose a tag to compare

@github-actions github-actions released this 10 Aug 14:14

新增

  • 发行产物新增 windows/arm64 架构: CI 打 tag 时同时产出
    jvm-windows-arm64-setup.exejvm-windows-arm64.zip
    (安装器 stub 为 x86, 在 ARM64 Windows 上靠系统内置模拟运行,
    释放出的 jvm.exe 为 ARM64 原生)。本地交叉编译用 make build GOARCH=arm64,
    构建产物改为按架构分目录存放 (dist/<arch>/jvm.exe)。
  • install.ps1 一键安装脚本自动检测系统架构 (x64 / ARM64),
    下载匹配架构的便携 zip。
  • ARM64 版 jvm 默认下载 ARM64 (aarch64) 的 JDK (此前默认 x64, 需手动配置)。
  • Microsoft Build of OpenJDK 支持下载 Windows ARM64 (aarch64) 构建
    (11/17/21/25 全部 LTS; aka.ms 短链与 SHA256 旁路校验模式与 x64 一致)。
  • arch 配置接受别名: amd64x64arm64aarch64 (统一走
    app.NormArch 规范化, 各 provider 行为一致)。

变更

  • Provider 层新增 Configurable 可选接口与 provider.ConfigureAll 统一分发
    全局下载配置 (目标架构/镜像): provider 实现该接口即自动接入,
    main.go 不再显式认识具体发行版适配器。
  • arch=aarch64 时使用 Corretto 会明确报错并建议改用 temurin / microsoft
    (Amazon Corretto 官方没有 Windows ARM64 构建; 此前会静默下载 x64 版
    靠系统模拟运行, 用户无感知)。

v0.7.0

Choose a tag to compare

@github-actions github-actions released this 08 Aug 15:54

新增

  • 启动时静默检查 jvm 新版本 (24 小时节流): 距上次检查超 24h 才查 GitHub
    Release, 落后时提示运行 jvm upgrade, 网络失败永不阻断主命令。
  • JDK 下载支持瞬时错误重试 (3 次指数退避) 与 HTTP Range 断点续传: 下载中断
    后下次 jvm install 从断点继续, 无需重下完整 zip。续传细节 (.part 文件)
    封装在下载层内部, 编排层与自更新流程无感知。
  • jvm doctor 新增三项诊断:
    • java 版本: 实跑 java -version, 排除 "文件存在但二进制损坏/缺 DLL"。
    • 版本目录完整性: 扫描 ~/.jvm/versions/ 各目录是否均有 bin/java.exe,
      标记解压中断的半成品。
    • 注册表 PATH 残留: 检查用户 PATH 里是否有非 current/bin 的旧 JDK 路径。

变更

  • 导出 junction.MajorOf 供 doctor 复用, 避免版本目录名解析逻辑重复。
  • app 包新增 CompareVersions / LatestGitHubTag 共享基础设施,
    供更新检查使用 (不引入新依赖)。

v0.6.1

Choose a tag to compare

@github-actions github-actions released this 08 Aug 12:50

Full Changelog: v0.6.0...v0.6.1