feat(maven): unify shared Maven context and macOS tool window - #320
Conversation
Mucheen
commented
Aug 29, 2026
3543540 to
18db4c9Compare
1lck
left a comment
There was a problem hiding this comment.
整体质量不错:分层严格按仓库规矩走,Swift 侧确实一处都没有拼 Maven 参数,全部收到 Rust 一处生成,这是最该做对的地方。JDT LS 那段也扎实——pending 有超时、有错误分支、重复 ServiceReady 不会重复入队,测试真覆盖到了。.mvn/maven.config 不漏进 arguments 那个断言写得挺细。
不过结合 #321 一起看,Run 路径上有三个回归,希望合并前处理掉。下面逐条在代码里标了。
另外两件不好挂行号的:
1. 新增的 500 行 Swift 测试一个用例都没跑起来。ExecutionModuleTests +262、MavenRuntimeTests +186、RunConfigurationIntegrationTests +52,报 no such module 'Testing',runner 1.7 秒内失败、0 个用例。这个是前提——不解决的话上面那几个回归的修复也没法验证。通常是切到完整 Xcode toolchain 而不是 Command Line Tools。
2. Lifecycle 阶段列表硬编码了两份。MavenContracts.swift:84 的 enum,和 #321maven.types.ts 里的 MAVEN_LIFECYCLE_PHASES,Rust 里反而没有。clean/validate/…/deploy 这九个词加一个就要改两个文件,而且不会有任何东西告诉你漏了。最轻的做法是放进 shared fixture,两端各加个一致性测试。
顺带一提,#321 那边 MavenTaskStatus 少了 cancelled(这边 MavenTaskState 有),行为对不齐;run.store.ts 里还混进了几处无关的缩进/换行改动。那两条我到 #321 上说。
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
3ae29d7 to
f431371Compare
1lck
left a comment
There was a problem hiding this comment.
重新过了一遍,之前提的 7 条行级问题 + 2 条整体问题全部关掉了,我在本机实跑验证:
cargo test:278 passed, 0 failed./scripts/test-macos.sh:691 tests in 79 suites passed —— 上次「0 个用例」的问题解决了,前提条件成立,回归修复是真被验证过的verify-shared-contracts/verify-rust-core-comments/verify-service-boundaries/verify-windows-boundaries:全 PASS
几条修得比我建议的更好:
cwd 没照我给的 != "." 抄,而是加了 configuration_override_has_key 去查 team/local 两层里键是否真的存在。这个判断是对的——我原来的写法会把用户显式写的 cwd: "." 当成默认值吃掉,你这版分得开,而且顺手让 create_user_configuration 不再生成 "cwd": ".",从源头上少了一类歧义。测试也覆盖了 custom-run 保留和默认继承两个方向。
skipTests 用了 Option<bool> 三态而不是 bool,Some(false) 和 None 区分开,跑测试的配置能压掉项目级 skipTests=true;还配了 remove_maven_skip_tests_override 和 schema 声明。这块比我说的完整。
-am 变成调用方策略(工具窗口 true / Run false),测试里正反都断言了,包括显式断言 -am 不出现。
fingerprint 现在真的有人读了:recordConfigurationFingerprint 在 run 时比较、refreshConfigurationFingerprint 带 revision 防串,acknowledgeReload 走 baseline。ExecutionModuleTests 里 setSkipTests(true) → reloadRequired、改回去 → 不 required,闭环了。
schema 命名 拆成 portable-configuration 和 launch-context 两份,verify-shared-contracts.sh 里补了逐字段断言($id、字段集、required 集),Maven 不再是「写完没人管」。
摘要漂移 用 platform-contract-v1.json 把两端规范化规则钉住了,macOS 侧抽出 storageIdentity 静态方法给 fixture 消费,lifecycle 九个阶段也一起钉进去 + 一致性测试。这个方案比硬抽一份实现合适。
可以合。剩下两条都是 #321 的活,不拦这个 PR:
Uh oh!
There was an error while loading. Please reload this page.
关联 Issue
Part of #291.
本 PR 提交共享 Maven Core、版本化契约与 macOS 实现。Windows 实现位于后续 PR #321,避免把两个平台的 UI 和原生适配混在同一个 review 中。
主要变更
rust/lithe-core中统一 Maven reactor/模块/Profile 扫描、配置合并、指纹与 Launch Plan 生成。maven-portable-configuration-v1和maven-launch-context-v1两份 schema,并增加逐字段契约验证。settings.xml、Maven Home/可执行文件和 Maven 专用 JDK;绝对路径只保存在本机 Application Support。Review 修复
cwd继续拥有最高优先级,未配置时才继承 reactor 工作目录。mavenSkipTests:null继承项目设置,显式false即使项目勾选 Skip Tests 也会运行测试。-pl <module>;只有 Maven 工具窗口默认追加-am。configurationFingerprint,配置变化时触发 JDT reload 提示。projectCount和 Maven Home 解析为重复bin/mvn的问题。run-configuration-v1schema 已声明可选mavenSkipTests。安全与边界
settings.xml路径,不读取、复制或序列化其中的凭据。settings.xml绝对路径。验证
./scripts/verify-rust-core.sh./scripts/verify-shared-contracts.sh./scripts/verify-service-boundaries.sh./scripts/verify-module-boundaries.sh./scripts/verify-rust-core-comments.sh./.agents/skills/write-stable-tests/scripts/verify-test-stability.shswift build --target Lithe当前环境限制
本机只有 Command Line Tools,Swift 测试 target 报
no such module 'Testing',因此本地 Swift timing lane 未执行;完整 Xcode 环境由当前 PR CI 验证。