feat(java): --version 指定 JDK 版本(Temurin/Oracle 能,MS 只认快照,Zulu 报错)+ --dry-run(M280)
用户原话:「我们内置了那么多镜像源 甚至用户不能手动选择指定版本下载。」这条之前
`InstallRequest` 根本没有版本字段,四家全是「该 major 最新 GA」。
core:
- `InstallRequest.version: Option<String>` + `with_version`;`None` 时仍走 `source::fetch`
的老路径(`latest_url` / `parse_latest` / `fetch_latest` 一个字节未动)。
- `source::fetch` 在唯一分派点按 `Option<&str>` 分两路:`latest` 与 `pinned`,后者绝不换家。
- Temurin(新 `api/version.rs`):先 `assets/feature_releases/{major}/ga` 枚举(`page_size`
上限 20),把用户给的公共版本号翻成 release 名,再打 `assets/release_name/eclipse/{name}`
取归档——不走 `latest`。实测 `/v3/assets/version/{v}` 在线上回 404,故不用它(见报告)。
- Oracle:`versions_for` 接进选择路径(`select_version`),`None` 仍是 `pick_version`。
- Microsoft:只认写死快照里那一个版本号,别的版本明确报错并说清「这家不能自选版本」。
- Zulu / Termux:上游只有 latest / 版本由系统包定 → 明确报错,不回落、不换家。
- `catalog.rs` 收策略:`matches_version`(唯一相等判据,不做前缀近似)、
`version_pin_error`(四家文案互不相同且各自说清原因 + 下一步)、`version_mismatch`
(兜底闸:装到的版本必须真是用户要的那一版)。
- `plan()` 改成接 `&InstallRequest`,`--dry-run` 与真装走同一条选择路径。
cli:
- `java install <major> [--version V] [--dry-run] [--vendor X]`;`--json` 增 `requested_version`。
- 全局 `--version` 只在子命令之前成立,否则 `java install 21 --version 21.0.13+9` 会被
当成「打印启动器版本」吞掉。
拆分(守 400 行硬线,均为纯搬移 + 逐字节核对):
- `api.rs` → `api/version.rs`、`oracle.rs` → `oracle/listing.rs`(纯的那一半)、
`cli/parse.rs` → `cli/parse/java.rs`、`commands/java.rs` → `commands/java_install.rs`。
门禁(CARGO_TARGET_DIR=C:/Temp/ull-target/wt-280):core --lib / --test game / --test launch、
cli --all-targets、fmt --check、clippy -D warnings 全部 EXIT=0。
This commit is contained in:
1 parent
c8f820caec
commit
9fded45d9e
16 files changed
+1352
-346
No files matched your search
@@ -236,7 +236,9 @@ fn java_subcommands() {
|
||||
invoke(&["java", "install", "21"]).command,
|
||||
Command::JavaInstall {
|
||||
major: 21,
|
||||
vendor: None
|
||||
vendor: None,
|
||||
version: None,
|
||||
dry_run: false,
|
||||
}
|
||||
);
|
||||
// D23:`--vendor` 钉死发行版(别名也认),`java vendors` 列出四家。
|
||||
@@ -245,6 +247,8 @@ fn java_subcommands() {
|
||||
Command::JavaInstall {
|
||||
major: 21,
|
||||
vendor: Some(unlucky_core::game::java::JdkVendor::Oracle),
|
||||
version: None,
|
||||
dry_run: false,
|
||||
}
|
||||
);
|
||||
assert_eq!(
|
||||
@@ -252,6 +256,8 @@ fn java_subcommands() {
|
||||
Command::JavaInstall {
|
||||
major: 17,
|
||||
vendor: Some(unlucky_core::game::java::JdkVendor::Temurin),
|
||||
version: None,
|
||||
dry_run: false,
|
||||
}
|
||||
);
|
||||
assert_eq!(invoke(&["java", "vendors"]).command, Command::JavaVendors);
|
||||
|
||||
Reference in new issue
Block a user