feat(windows): support Maven Daemon (mvnd) - #897
NickJohnson868 wants to merge 1 commit into
Conversation
xiaoyumuxi
left a comment
There was a problem hiding this comment.
审核结论
基于 ba217ca9ad431bc53ee179e5f5bde0cdc66577d9 的完整 8 文件 diff,并追踪 Windows 工具链发现、无进程导入解析、实际启动解析和 Core 的 JDT 全局设置路径,暂未发现本次改动引入的确定性阻塞问题。此结论不等于 Windows 实机功能已验收;建议维持 Draft,补齐当前提交的目标平台验证后再转 Ready。
已检查的关键行为
- 显式配置的根目录、bin 目录和启动文件复用同一个候选生成器;选中 mvnd 时不绕到发行包内嵌的普通 Maven,无效显式路径仍返回失败。
- 自动候选顺序仍先考虑项目 Wrapper、MAVEN_HOME/M2_HOME 和 PATH 中的普通 Maven,再补充 MVND_HOME 与 PATH 中的 mvnd;发现结果没有额外排序打乱该顺序。
- Maven 版本解析跳过
Apache Maven Daemon标题;Core 对 mvnd 选择mvn/conf/settings.xml,对显式普通 Maven 保留自己的全局配置,并覆盖嵌入式 settings 缺失时不误用 daemon 根目录配置的测试。 - 新增默认单测使用临时目录和假启动文件,发现测试注入 probe,不依赖真实工具;中英文文案和平台功能矩阵生成视图已同步,验证状态保持 pending。
非阻塞建议与验收缺口
- 补充 MVND_HOME/PATH 自动发现与既有 Maven/Wrapper 优先级的确定性回归测试。当前新增测试主要覆盖显式配置,不能单独证明新增的环境变量发现分支和自动回退顺序;见第一条 inline。
- 保留现有“不启动 daemon”的路径集成测试,同时单独补充 Windows 上真正调用 mvnd 的受控构建验证。该 ignored 用例只检查路径存在和解析结果,不能替代实际客户端执行、全局设置生效或 JDT 导入验证;见第二条 inline。
本提交的 CI 与验证边界
已查询此 head,返回的 6 个 Actions 工作流均为 completed/success。进一步检查 Windows CI 的 job/step:Test shared Rust Core、Test Windows Rust host、前端类型检查和前端测试均成功,但 Test real JDT on Windows 为 skipped。因此当前已有本提交的 CI 测试证据,不应再只引用迁移前分支的通过记录;同时也不能把 CI 总体成功理解为真实 JDT/mvnd 端到端已经通过。
本轮没有本地运行 Cargo/Bun、启动真实 mvnd/JDT LS 或进行 Windows GUI 验证;以上为代码审查与实际 CI 记录核对。本次仅提交 Review 评论,不批准、不合并,也不改变 Draft 状态。
| } | ||
| } | ||
| if let Some(home) = std::env::var_os("MVND_HOME") { | ||
| executables.extend(custom_maven_executable_candidates(Path::new(&home))); |
There was a problem hiding this comment.
非阻塞测试建议:新增的 mvnd_paths_resolve_consistently_for_import_discovery_and_execution 始终传显式路径,并向 discover_maven_candidates 直接提供候选,因此没有执行这里的 MVND_HOME/PATH 自动发现分支。建议通过可注入的环境/候选来源,或隔离子进程,覆盖“仅 MVND_HOME”“仅 PATH mvnd”“普通 Maven 与 mvnd 并存”“有效 Wrapper 优先”和“无效 MVND_HOME 回退”,并断言无进程导入解析与启动解析选中同一个客户端。避免在并行单测中直接修改进程级 PATH/MVND_HOME。当前代码的候选顺序看起来符合既有优先级;这里建议补的是防回归证据,不是已确认的顺序错误。
|
|
||
| #[test] | ||
| #[ignore = "integration: requires LITHE_TEST_MVND_HOME pointing to a real distribution"] | ||
| fn mvnd_installed_distribution_resolves_without_spawning_a_daemon() { |
There was a problem hiding this comment.
验收边界建议:这个测试名称准确表达了“不启动 daemon”,实际也只检查文件存在以及 home/bin/executable 的解析一致性;即使客户端无法运行或构建读取了错误的设置,它仍可能通过。建议保留此轻量测试,另设显式启用的 Windows 进程级用例或记录当前 head 的实机验收:使用独立临时项目、daemon registry 和本地仓库,设置执行超时,真正通过解析结果运行最小构建,并核对预期的全局设置生效。清理只针对该测试拥有的 daemon/资源,不要影响用户其它构建。当前 Windows CI 的真实 JDT job 被跳过,JDT 全局配置的端到端验证也应单独补齐;不把现有路径测试或迁移前的实测视作已覆盖。
|
@NickJohnson868 同步一下:#890 的根本修复在 #908,由我们这边完成。它和本 PR 的 mvnd 支持是独立的两件事,本 PR 仍然需要继续推进。 需要留意的一点:两个 PR 都修改了 另外,#908 之后依赖树由插件通过 |
Related to #889
问题与行为
Windows 的 Maven 路径解析原先只识别普通 Maven 的 bin/mvn 启动入口,填写 mvnd 安装根目录时无法找到客户端。本次让现有 Maven 设置、工具链发现及执行解析接受 mvnd 安装根目录、bin 目录和启动文件,继续复用现有 Maven 流程。
改动范围
共 8 个文件。本 PR 不包含本地搜索功能、Maven 依赖输出预算、依赖树解析等其他修改;没有修改 Skill、CI、下载脚本或依赖版本。macOS 自动发现不在本次范围内。
验证
待完成