Repository navigation
feat: 从 Lithe 主仓库拆出 Java Support 插件(初始移植) - #1
Merged
Merged
Conversation
从 Lithe 主仓库 1daaeb525 移入插件包的静态部分和构建脚本: - dev.lithe.plugin.java-support:plugin.json(身份、权限、设置、语言服务器、 三个项目生成器不变)、图标和项目模板。清单暂不声明 backend,等宿主插件 接口就位后再加。 - scripts/assemble-package.sh、build-package.sh、verify-package.sh、 archive-package.sh:组装、校验、归档签名包。运行时包只读,JDT LS、Lombok、 java-debug、测试运行器和 JDK 都在构建阶段固定来源后放进包。 - scripts/prepare-jdtls.sh、prepare-jdk.sh 和 third_party 清单:来源地址与 SHA-256 固定在清单里。 - scripts/host-tools.sh 与 host-tools.lock.json:签名器和校验器按固定的 Lithe 提交构建。
把 Core 和 macOS 层里的 Java 规则移成不依赖宿主的 Rust crate:入口与 main 方法识别、运行标记、JDT LS 设置与启动、工作区策略与缓存保留、构建就绪判断、 项目准备、Spring 与 MyBatis 索引、JDK 选择、启动命令与 argfile、Java 测试 发现与调试启动、测试结果通道状态机。命令名、载荷、响应和错误码与 Core 一致。 Maven 和 Gradle 的导入逻辑不在这里。JDT LS 的导入设置由 Maven/Gradle 插件 提供,Java 只声明接受的键(CONTRIBUTED_SETTINGS_KEYS)并校验收到的片段。 jdt_contributions 定义跨插件接口 languageImport.settings 与 languageImport.settingsChanged:按提供方分槽的合并、状态和失败记录。 宿主差异(存储、日志、Git、语言服务器通道)保留为带计划编号的 TODO(host-api: API-NN) 占位。fixtures 是与主仓库共享的契约样例。 本提交与下一个提交(后端)合在一起才是完整的 Cargo 工作区。
backend 是基于已发布 Rust 插件 SDK(lithe_plugin_sdk 0.1.0,标签 sdk-rust-v0.1.0)的插件后端进程:把每条领域命令注册为同名插件函数,宿主 取消转发到领域层的协作取消,错误映射到稳定的 java.* pluginErrorCode。 plugin_functions 是后端唯一知道跨插件函数中转协议的模块:启动 JDT LS 前 发现并调用所有 languageImport.settings 提供方,单个提供方失败或超时不影响 其他提供方,答案只接受 JDT LS 导入设置命名空间内的键。中转协议形状是暂定的, 改名只动这个文件。languageImport.settingsChanged 的注册等 SDK 或中转暴露 调用方插件 ID。 sdk.lock.json 记录 SDK 的标签、提交和 crate 归档 SHA-256, scripts/verify-sdk-lock.sh 与 backend/tests/repository_pins.rs 检查 Cargo.lock 解析到同一个提交。
ci.yml:Ubuntu 上检查格式、clippy、测试和 SDK 锁;macOS 上构建并校验未签名 开发包。release.yml:推送 v<版本> 标签后先跑 Rust 检查,再构建两个架构的包, 只有最后的签名与发布步骤拿 LITHE_PLUGIN_PACKAGE_PRIVATE_KEY。发布保持为 预发布,直到 Lithe 稳定版不再内置 Java Support。
README 说明功能、工作方式、开发命令和发布流程。MIGRATION.md 是移植账本: 主仓库路径(路径@1daaeb525)到本仓库的映射表(每行一个状态)、交给 Maven/ Gradle 插件的内容、跨插件函数设计(API-35)、按计划编号分类的 TODO(host-api) 清单、判断记录、主仓库分阶段删除清单、发布与签名、未完成事项。
MIGRATION.md 第 4.2 节原来指向本机临时目录,公开后无法访问。改为主仓库 preview 提交 dbe8441e2 上的原文件链接。第 6 节加上各计划编号对应的宿主 PR,中转相关的描述链接到 #1742。
xiaoyumuxi
marked this pull request as ready for review
November 5, 2026 01:13
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
从 Lithe 主仓库(1lck/Lithe-IDEA)拆出 Java Support 插件的第一版代码,作为这个仓库的起点。目标是让主仓库的 Rust Core 和 macOS 宿主里不再有 Java 专属逻辑,这些逻辑改由本插件通过通用插件 API 提供。
这个 PR 还没有接入宿主:
plugin.json没有声明backend,用到的通用 API 还在主仓库的 PR 里评审(见下文“依赖的宿主 PR”)。合入本 PR 不会改变任何 Lithe 版本的行为。内容
按提交顺序:
dev.lithe.plugin.java-support/、scripts/、third_party/)Plugins/mac/Official/JavaSupport搬来的清单、图标、项目模板和设置。id为dev.lithe.plugin.java-support,version为 1.1.0,pluginAPIVersion为 4。prepare-jdtls.sh、prepare-jdk.sh在构建阶段固定 JDT LS、Lombok、java-debug、vscode-java-test 运行器和 JDK 的来源,并校验哈希;assemble-package.sh、build-package.sh、archive-package.sh、verify-package.sh负责组装、归档和校验。crates/java-domain:从 Core 移过来的 Java 领域规则,宿主里不再需要它们。包括:fixtures/下的 LSP、Java、调试、Spring、MyBatis 样例。backend/)lithe_plugin_sdk0.1.0(标签sdk-rust-v0.1.0)。sdk.lock.json固定提交,scripts/verify-sdk-lock.sh检查Cargo.lock解析到的提交,--download还会核对已发布 crate 的 sha256。plugin_functions.rs:通过 Core 中转调用其他插件函数(API-35,插件 → Core → 插件),例如向 Maven/Gradle 插件取 JDT 需要的工程配置。中转协议按主仓库 #1742 的设计编写,目前是暂定的。NotSupported,等宿主 API 合入后再实现。.github/workflows/)ci.yml:rust(ubuntu):cargo fmt --check、clippy -D warnings、cargo test --workspace --locked、SDK 锁校验。package(macos-26):构建未签名的开发归档。Draft PR 不跑这一项,避免占用 macOS runner。release.yml:推v*标签时触发,先测试再发布。只有最后的签名步骤会读取LITHE_PLUGIN_PACKAGE_PRIVATE_KEY,发布标记为预发布。签名和校验工具从主仓库固定提交构建,提交号记录在host-tools.lock.json。README.md和MIGRATION.md。MIGRATION.md写明每块逻辑从主仓库哪个文件搬来,用固定提交dbe8441e2的永久链接,并列出每块要靠哪个通用 API 接回宿主。依赖的宿主 PR
本插件要等这些 PR 合入,才能声明
backend并接上宿主:Maven settings 和工程导入归 Maven/Gradle 插件(lithe-plugin-maven、lithe-plugin-gradle),本插件只经中转取用。Spring Boot 和 MyBatis 的支持留在本插件里,不再拆分。
未完成事项
详见
MIGRATION.md第 10 节,主要有:plugin_functions.rs及其测试。pluginAPIVersion4,并且主仓库不再内置 Java Support(目前official-plugins.json里是bundledUntilPublishedVersion: "1.1.0")。验证
在 macOS(Apple Silicon)本地运行,工具链用 Rust 1.99.0,与 CI 的
dtolnay/rust-toolchain@stable一致。结果如下:cargo fmt --all --check:通过。cargo clippy --workspace --all-targets --locked -- -D warnings:通过。cargo test --workspace --locked:295 个测试全部通过,其中包括中转相关的 24 个测试。scripts/verify-sdk-lock.sh --download:通过。needless_borrows_for_generic_args上失败,原因是本机较旧的 clippy 没有这条检查;已修复(jdt.rs中把fn指针按值传入),并用 1.99.0 在本地重跑了上面所有检查。