Skip to content

fix(java): stabilize Windows launches and cold-index run actions - #9

Merged
1lck merged 1 commit into
mainfrom
codex/java-legacy-performance
Nov 13, 2026
Merged

1lck merged 1 commit into
mainfrom
codex/java-legacy-performance

Conversation

@1lck

@1lck 1lck commented Nov 13, 2026

Copy link
Copy Markdown
Contributor

关联 Issue / Linked issue

PR 类型 / Type

  • fix:缺陷修复

改动说明 / What changes

背景 / Why

真实 Windows / 旧 Java 8 项目暴露了运行时入口、路径和冷索引动作恢复缺口。项目构建和 JDT 就绪并不能证明 Run/Debug 及导入配置真正可用。

改动 / Changes

  • Windows 定位 java.exe;用成熟 url 处理 drive / UNC / verbatim / 中文文件 URI,拒绝相对路径。
  • package_root 在 canonicalize 后通过 dunce 安全简化 Windows 路径,避免 Lombok 对 verbatim javaagent 路径 FATAL 103。
  • 复用领域层 manifest JAR 规划,把过长 Windows classpath 编码为宿主拥有的临时二进制文件;适用于 Java 8 及更新版本。manifest 行宽、CRLF、UTF-8 百分号编码与运行结束删除均验证。
  • 类路径准备失败时停止已创建的测试监听器;新增 run.classpath_failed 分类,SDK 记录唯一失败。
  • Java 工具定义声明 JAR 的 -jar / entry 模板;配套 Viva 使用 Core 既有模板接口实例化,裸 JVM Run/JDT 参数不经过该入口模板。
  • 启用 JDT 公开的 progressReportProvider,继续使用现有 language/progressReport 通道。瞬态动作查询失败后合并活动任务完成事件再刷新,处理完成/超时倒序;最多 128 个任务标识、每周期三次刷新,代际隔离且关闭即释放,无新增轮询。
  • 延迟/恢复/耗尽/进度上限走 SDK 目录诊断,高频成功仍抑制。
  • 代码透镜 ID 统一正斜线;Windows 的目录 mtime / junction 测试使用原生可确定工具。
  • 新增 scripts/package/build-windows.mjs 开发组装入口:输入同源原生 x64 EXE,验证 PE、锁定 JDK SHA-256、JDT 资源和 config_win,临时目录清理,输出 ZIP 校验和。没有新增运行期下载。
  • README 纠正旧宿主/API 说明,列明真实验收范围、性能对照、已知限制和开发包性质。

不在本 PR 范围内 / Out of scope

不发布 tag/Release/市场条目,版本 1.1.0 仍未发布;未改生产 JDT 1.61 / Temurin 21 / Parallel GC / Xms256m / Xmx2048m。
Java 5/7 原源码级别、JavaCC 生成模型(主仓库 #1881)、多版本 JAR(#1882)、jOOL ECJ 泛型差异(#1883)未完整支持。
JSP HTTP/Servlet 调试通过不代表 JSP 源码补全或 JSP 断点;Ant 源码布局通过不代表执行 Ant target。长 module-path 仍留在 #7。

类型专属:fix

复现与根因

  • 原生 Windows 中 java.exe / URI 单元回归为红;JDK 21 的 javaagent 使用 canonicalize 的 verbatim 路径立即 FATAL 103。
  • 冷导入时 6 秒动作查询在索引前超时,初始就绪/导入事件不能恢复;将测试等待扩为 120 秒仍失败。零散完成事件还会提前耗尽预算,故按活动任务集合合并。
  • 所有修复使用通用宿主服务;Java 专属判断均留在插件。旧实现源于本插件拆分迁移及主仓库 0faecba491 的对应接线缺失;具体失败与对照在配套客户端 Note/PR。

检查项

  • 保留修复前的 Windows 失败、路径 FATAL、动作超时和长 classpath 红例;修复后单元与真实全链路为绿
  • [N/A] 无法自动化:本轮范围可无头自动化
  • 搜索所有调用方与协议字段;URI 签名调用点同步为可失败结果
  • 两平台复用同一插件规则,Windows 特有事实在目标平台测试
  • 既有触发扫描吞错单独建单 #1879,没有顺手重构
  • 客户端配套 Note 记录冷索引、工具入口和资源所有权

范围检查 / Scope checks

功能矩阵 / Feature matrix

N/A:独立插件不保存客户端矩阵;配套 Viva PR 更新 Java 支持与语言服务器会话记录,原生窗口仍 pending。

统一日志系统 / Structured logging

  • SDK 自动终态;新增类别列入 RUN_ERROR_CODES / RUN_CATEGORIES,恢复只记录一次,高频成功不产生 INFO
  • 真实 Core 事实断言运行成功、失败、操作身份与编译拒绝;日志不含配置、源码、路径或工具输出
  • 原生日志窗口、所有启动/取消/恢复分支未逐项验收;客户端旧生成/使用门禁移除后的恢复见主仓库 #1802,外部执行轨迹见 #1721,不把缺失门禁写成通过

界面文案 / i18n

N/A:没有新宿主 UI 文字;SDK 错误使用稳定类别,宿主呈现既有本地化失败。

逻辑归属 / Logic placement

  • 工具专属规则在插件 / JDT;宿主仅 native I/O,既有 Core 工具模板负责参数语义,没有宿主 Java 分支

性能与内存 / Performance and memory

  • 首次需要才激活;新恢复由事件触发、有限状态与次数;不新增空闲轮询
  • 六对 AB/BA、同一客户端/Core/Java 17、虚拟机关闭:12 轮 Maven 全链路全部通过
  • JDT 就绪 RSS 793.25 → 793.79 MiB(p=.589),结束 RSS 816.13 → 817.40 MiB(p=.699);动作可用 6.493 → 6.421 秒(p=.394),热补全 11.76 → 11.87 ms(p=1)。没有显著差异,不宣称内存或响应提升

设置 / Settings

N/A:不新增设置;构建工具真实配置仍由各自插件提供。

插件契约 / Plugin contract

N/A:使用既有能力、方法与工具模板;没有新增协议字段、宿主方法或 SDK 修改。Rust SDK 固定 65cf82343c5e315aae2e335b2e8f0217b703e89a,未假定不存在的发布资产可下载。

发行包与资源 / Bundle and resources

  • 运行期缓存/日志/索引/临时文件位于宿主可写位置,安装目录全文件 SHA-256 在实际 Mac/Windows 流程后不变
  • 新脚本仅构建期写本插件 .artifacts,使用既有锁定资源入口,不跨工作树共享可变状态;不修改已发布包
  • 配套客户端 runtime-bundle-immutability 门禁通过;没有修改客户端资源复用清单的下载/缓存入口

无用代码与重构 / Dead code and refactoring

  • 新改动不留废弃分支;既有扫描诊断债务为主仓库 #1879

验证 / Verification

命令或操作 平台 结果
cargo fmt / clippy --workspace --all-targets --locked -- -D warnings / SDK 锁校验 macOS 通过
完整 Rust 逐项计时 macOS 378 项通过
完整 Rust 测试及 release 后端构建 Windows x64 通过
真实 ZIP + Viva:Maven、Gradle、普通源码、外部 JAR、Eclipse/Ant、JSP/Servlet macOS / Windows 编译、补全、运行、断点变量、继续/停止、拒绝旧 class 与只读校验通过;Gradle 另验证真实配置与中转无超时
Windows 300 JAR 长 classpath Windows 尾部依赖可用、实际使用临时 JAR、退出后删除
真实历史源码 macOS Commons Text 1.9 原 POM 通过;其他限制见 README/关联 Issue

未能执行的检查和原因: Windows 正式签名/安装器、原生 UI、Linux、任意框架与行内测试运行器未完整验收。ARM Windows 的 x64 仿真耗时不作原生 AMD64 性能结论。

提交前确认 / Final checks

  • 独立插件从最新 main 创建,目标 main;Draft 后在本地验证完成时 ready
  • 未提交 dist / .artifacts / 第三方下载物、源码或私有路径
  • 原始未发布 ZIP 保留;没有发布操作
  • 测试应用与 JVM 已结束,虚拟机关闭

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant