Skip to content

fix(java): 接入 Viva 契约并恢复 Maven 运行调试链路 - #8

Merged
1lck merged 2 commits into
mainfrom
codex/viva-java-integration
Nov 13, 2026
Merged

1lck merged 2 commits into
mainfrom
codex/viva-java-integration

Conversation

@1lck

@1lck 1lck commented Nov 13, 2026 •

Copy link
Copy Markdown
Contributor

关联 Issue / Linked issue

PR 类型 / Type

  • fix:缺陷修复

改动说明 / What changes

背景 / Why

旧清单、SDK 和协议版本不能被当前 Viva/Core 接受。即使语言服务启动,过早注册的 Run 动作会在 JDT 就绪前查询;编译错误还可能继续运行已有 class。本 PR 恢复现有插件的 Maven/Java 工作流,不在客户端或 Core 加 Java 专属逻辑。

改动 / Changes

  • 清单对齐当前契约 0;生成器字段从 runtime 改为 tool;移除已废弃的 capability 名。
  • Rust SDK 从旧文档仓库迁到 Core,固定 SDK 0.4.0 的 65cf82343c5e315aae2e335b2e8f0217b703e89a,同步 Cargo.lock、sdk.lock 与校验脚本。该版本文档写有发布 tag,但远端尚无 tag/资产,因此固定实际 commit,不引用虚构下载物。
  • Java/Debug 首次需要才激活,移除 onWorkspaceOpen。
  • 复用 SettingsSession 的 server/context 代际状态,JDT running 后才注册 Run 动作;忽略停止后的迟到事件。
  • 只接受 JDT 构建成功码,编译报错拒绝运行旧 class;新增回归。
  • 扩展稳定性测试捕获渐进导入后 Run 标记偶发不出现:现响应已有的 ProjectsImported/ClasspathUpdated/ProjectsDeleted 转发事件,按最新服务器/工作区代际重收集;没有新增轮询或宿主协议。
  • 当前宿主没有 workspace/findFiles,暂去掉控制台堆栈链接声明、无效搜索权限及因此变成无用的 resolver。
  • README 补齐当前权限用途、日志级别/类别、真实 ZIP 验证入口、平台与旧源码级别限制。

不在本 PR 范围内 / Out of scope

不发布版本,不改版本元数据,不解决 #7。Windows/Linux、原生窗口、Java EE 容器、所有生成器/行内测试运行器未验收。Java 5/7 原源码级别仍无法完成 Run/Debug:Maven/JDK 8 能编译,但当前 ECJ 最低 source 8;不会通过允许编译失败绕过它。


类型专属:fix

复现与根因

  • 原清单 schema 2/API 4 及旧 SDK 协议被契约 0 拒绝;首次就绪前的动作查询失败;buildWorkspace=2 时旧实现继续启动旧产物。
  • 28628cb 中的清单/运行路径保留旧客户端协议与“build with errors 可启动”行为。真实 ZIP 安装/调用和修复前失败的编译状态回归用于复现。
  • 影响平台:清单和 Rust 后端跨平台;运行时只在 macOS arm64 的无头 Viva 上实际验证。

检查项

  • 已先写编译失败回归并确认修复前失败、修复后通过;backend/src/run.rs:compiler_errors_do_not_launch_previous_bytecode。
  • 已搜索清单、SDK、后端函数、宿主与运行调用方;协议只消费 Core 真源。
  • 新增 running/停止/迟到事件/上下文代际回归。
  • [N/A] 手动复现:使用真实 ZIP/真实工具自动集成,不依赖模拟 JDT 或 DAP。
  • 只修改兼容/生命周期/编译安全所需代码;当前改动导致无用的 resolver 已删除。
  • Java 规则保持在插件,客户端配套修复单独提交;既有关闭重试债务见 [Feature] 重构插件会话停止回执,避免正常关闭通过销毁失败反复探测 1lck/Lithe-IDEA#1860。
  • [N/A] 本仓库 Agent Note:插件仓库不保存客户端的 Agent 笔记,当前说明在 README。

范围检查 / Scope checks

功能矩阵 / Feature matrix

N/A:本仓库是独立插件;客户端 PR 1lck/Lithe-IDEA#1862 同步 editor actions/providers/run 三项矩阵,未验证平台保持 pending。

统一日志系统 / Structured logging

  • 复用 SDK litheLogging 0;后端通道 plugins/io.github.lithe-idea.java-support/host,类别和来源表见 README“日志”。无新目录事件或自由文本日志。
  • 真实 Core 验证关键运行 INFO、编译失败单条 ERROR run.build_failed、真实 op 身份、高频 collection 成功抑制。
  • JDT 原生日志只在宿主提供的可写目录;完整工作流前后安装包全文件 SHA-256 不变。
  • [N/A] 旧客户端日志生成/使用脚本:当前已移除,未宣称通过不存在的门禁;Core 实际事实验收仅覆盖 README 列出的工作流。
  • 原生日志窗口、全部降级恢复、语言服务器/适配器启动失败和启动中取消未全部验收;保留为明确限制。

界面文案 / i18n

N/A:没有新增用户文案,构建失败使用已有错误文字;只迁移已有字段和声明。

逻辑归属 / Logic placement

  • Java、JDT、classpath 与调试启动知识只在插件及成熟上游;未改 Core。
  • 消费单一 Core 契约/SDK,无文档或 SDK 副本。

性能与内存 / Performance and memory

  • 不再工作区打开即启动 Java;无新增常驻轮询或 JDT/JDK 资源。
  • 真实 Run、Debug Stop、工作区关闭后退出;测试不修改用户插件或配置。
  • 小工程 JDT 进程树约 0.8 GiB,属单点 RSS,非峰值/总内存/前后性能基线;没有性能改善量化声明。

设置 / Settings

N/A:未新增设置;生成器旧 runtime 引用改为当前 tool 字段,不添加影子配置。

插件契约 / Plugin contract

N/A:消费当前契约,不增加宿主 API、通知或 schema。SDK/契约参考 commit 已固定并记录,不改协议。

发行包与资源 / Bundle and resources

  • 沿用已有固定哈希的 JDT、调试器、Lombok 和随包 JDK;运行时不下载程序,不写插件包。
  • SDK source 固定 Git commit;scripts/verify-sdk-lock.sh 核对 Cargo/SDK/清单一致,拒绝未知/多余参数。
  • [N/A] 客户端资源复用清单:未新增资源路径或下载入口,客户端没有新增可复用资源。

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


验证 / Verification

命令或操作 平台 结果
cargo fmt --all --check macOS arm64 通过
cargo clippy --workspace --all-targets --locked -- -D warnings macOS arm64 通过
有界 Rust 逐项计时入口 macOS arm64 372 项通过,无硬超时(新增渐进导入刷新回归已先确认旧实现失败)
scripts/verify-sdk-lock.sh macOS arm64 通过
scripts/build-package.sh --arch arm64 / x86_64 + scripts/archive-package.sh macOS arm64 两种 macOS 真包构建、签名/架构/资源校验通过(本机 x64 为交叉构建,不声称 Intel 运行验收);GitHub 对两架构打包也通过
Viva TestJavaPluginMavenWorkflow macOS arm64 headless 含第三方依赖,补全、编译、运行、断点/变量、继续、停止、错误编译拦截,最终包连续三轮通过,18.54/18.23/19.20 秒
Java 8/旧布局/中文空格 reactor/Profile/JAXB macOS arm64 headless 8 类 Java 8+ 全链路通过;第二轮捕获的多模块偶发已修复,修复后该跨模块场景连续五轮通过,完整矩阵再通过;Java 5/7 仅拒绝边界通过
Commons CLI 1.3.1 / Joda-Time 2.3 macOS arm64 headless 原 source 5 配置 Maven 编译/补全可用、Run/Debug 拒绝;仅在副本改 source/target 8 后完整链路通过,不能算原配置受支持
独立 ECJ -source 1.5/1.7/1.8 macOS arm64 前两者拒绝、1.8 成功;Java 5/7 未算作完整流程通过

未能执行的检查和原因: 原生窗口与 Windows/Linux 未执行,按用户要求使用无头模式。私有仓库、真实 Java 5/7 VM、Ant 命令、Java EE 容器、全部生成器和行内测试运行器未覆盖。README 中的临时 POM 升级结果不代表原旧项目配置可用。

提交前确认 / Final checks

  • 插件分支基于最新 main;主客户端以 preview 为基线。
  • 先创建 Draft,本地与扩展验证完成后再 ready。
  • 不提交 target/dist/.artifacts、私有路径、Token 或原始用户日志。
  • 已完成轮次的应用/插件/JVM 均已退出;最终验证已结束,确认没有本地应用/插件/JVM/测试进程残留。

@1lck
1lck marked this pull request as ready for review November 13, 2026 16:46
@1lck
1lck merged commit 0e37afa into main Nov 13, 2026
2 checks passed
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