mise v2026.10.19(GitHub Release 标注 Published 2026-10-24T20:02:03Z,约北京时间 10 月 25 日 04:02)把 lockfile_mode 的默认值改成了 generate。本机装的是 2026.10.19 linux-x64 (2026-10-24),空目录里 mise settings get lockfile_mode 直接回 generate。对只写了 java = "21"、又开了 lockfile = true 的项目来说,默认会去锁 7 个平台;Temurin 这条解析到 21.0.13+9.0.LTS 时没有 windows-x64 元数据,mise lock 和带自动锁的 mise install 都会以 ERROR 退出,而且目录里根本不会出现 mise.lock。
官方 Release Notes 的 Changed 一节写明:lockfile_mode = "generate" 成了默认;开启锁文件后,安装会按当前请求重建 mise.lock,复用没变的条目,并把其它平台也锁进去,好让一台机器提交的锁文件在另一台平台上跑 mise install --locked 时不因缺条目失败。格式没变,想回到旧行为就设 lockfile_mode = "merge" 或环境变量 MISE_LOCKFILE_MODE=merge。两种模式都不会凭空建锁文件,还是要 mise lock 或配置里 lockfile = true。
先用最小配置复现默认 generate 的失败路径:
[tools]
java = "21"
[settings]
lockfile = true
mise trust 之后跑 mise lock,终端里先声明要打 7 个平台,随后在 windows-x64 上炸掉,退出码 1,当前目录没有 mise.lock:
→ Targeting 7 platform(s) for ~/demo/mise-java-default/mise.lock: linux-arm64, linux-arm64-musl, linux-x64, linux-x64-musl, macos-arm64, macos-x64, windows-x64
→ Processing 1 tool(s): java@21.0.13+9.0.LTS
mise lock java@21.0.13+9.0.LTS linux-x64
mise lock java@21.0.13+9.0.LTS linux-arm64-musl
mise lock java@21.0.13+9.0.LTS linux-x64-musl
mise lock java@21.0.13+9.0.LTS macos-arm64
mise lock java@21.0.13+9.0.LTS linux-arm64
mise lock java@21.0.13+9.0.LTS macos-x64
mise lock java@21.0.13+9.0.LTS windows-x64
mise ERROR failed to resolve java for windows-x64: no metadata found for version 21.0.13+9.0.LTS on windows-x64
mise ERROR Version: 2026.10.19 linux-x64 (2026-10-24)
同样内容改成 lockfile_mode = "merge" 再 lock,windows-x64 那条变成 WARN,其余 6 个平台照写,锁文件落盘:
mise WARN failed to resolve java for windows-x64: no metadata found for version 21.0.13+9.0.LTS on windows-x64 (version 21.0.13+9.0.LTS)
mise lock ✓ 6 platform entries
✓ Updated 6 platform entries (1 skipped)
✓ Lockfile written to ~/demo/mise-java-merge/mise.lock
锁文件里能看到 linux 与 macOS 的 java 平台段,没有 windows。也就是说,generate 默认更“全平台或失败”,merge 更像“能锁多少写多少”。官方把 generate 定为默认,正是为了跨机器 --locked;副作用是某个平台解析失败时,整次操作直接停,连半成品锁都不留。
mise install 在 lockfile = true 且工具已经装好的情况下也会顺带跑锁。用默认 generate、只配 java = "21" 时,安装阶段显示 already installed,随后同样冲向 7 个平台,在 windows-x64 上报同样的 ERROR,退出码 1,仍然没有 mise.lock。对照实验里,只锁 gradle = "9.8.2"、不碰 java,默认 7 平台(含 windows-x64)可以一次写完,说明问题出在这条 Temurin 版本缺 windows 元数据,不是 generate 本身写不了 windows。
给 Java 项目裁掉 windows(以及本机用不到的 musl)之后,generate 就按预期工作。例如:
[tools]
java = "21"
gradle = "9.8.2"
[settings]
lockfile = true
lockfile_mode = "generate"
lockfile_platforms = ["linux-x64", "linux-arm64", "macos-arm64", "macos-x64"]
mise install 会在装完(或确认已装)后写出 8 条平台条目:gradle 与 java 各 4 个。本机解析结果是 java@21.0.13+9.0.LTS(backend core:java,shorthand_vendor temurin)和 gradle@9.8.2。mise install --locked 能装上同一套工具,mise exec -- java -version 看到 OpenJDK 21.0.13 Temurin,mise exec -- gradle -version 看到 Gradle 9.8.2。
同一套工具链上搭了最小 Spring Boot 3.5.6 Web 项目,server.port=18080,mise exec -- gradle bootJar --no-daemon 输出 BUILD SUCCESSFUL in 14s,打出约 20 MB 的 fat jar。启动后访问根路径:
$ curl -s http://127.0.0.1:18080/
ok from 21.0.13
启动日志里有 Tomcat initialized with port 18080 (http) 和 Started DemoApplication in 1.231 seconds。说明 generate 默认改完之后,只要把 lockfile_platforms 收到实际会发布的平台,Java / Gradle / Spring Boot 这条链路可以正常锁、装、编、跑。
如果你还想保留“缺一个平台也不挡整次写入”的旧手感,按 Release Notes 设回 merge 即可。团队仓库若以 Linux / macOS 为主、又开了 lockfile = true,升级到 2026.10.19 后第一次 mise install 或 mise lock 建议先看终端是不是在扫那 7 个默认平台;碰到 java 这类缺 windows 元数据的工具,先写 lockfile_platforms,再指望锁文件进 Git。
一起交流
分享你的思考,让讨论更进一步。