Repository navigation
[Bug] macOS Java 插件启动 JDT LS 后立即退出并持续重启,日志写入 app bundle #1523
Description
Platform / 平台
macOS
Area / 模块
Language support / 语言服务
Lithe version / Lithe 版本
本地源码构建,运行包 Info.plist:版本 0.1.0,build 3;LitheBuildGitRevision=ce7098c09d3faba9783600dc33985c49ae42868f,LitheBuildGitBranch=codex/macos-editor-definition-navigation,LitheBuildGitDirty=true,构建时间 2026-10-27T02:32:08Z。
这是运行包实际元数据,不是用当前 checkout 代替故障版本。本地包含尚未提交的 macOS Command 悬停/定义导航修改,是否与问题存在因果关系尚未验证;未验证正式发布版是否受影响。
Priority / 优先级
P1 / 尽快处理:使用体验大幅下降,但通常仍可继续使用
OS and architecture / 操作系统与架构
macOS 26.5.1 (25F80),Apple M4 / arm64,24 GiB 内存;本地物理机。
Environment / 环境信息
- 运行入口:本地工作树的独立 preview app bundle;未重启或修改用户故障实例进行复现。
- Java Support:运行包内官方插件 dev.lithe.plugin.java-support,1.0.0。
- 实际 JDT LS 启动 JVM:包内 Eclipse Temurin 21.0.12.1+1-LTS,aarch64;日志显示另向 launcher JAR 传入
--java-executable <SYSTEM_JDK_21>/bin/java,两者必须区分。 - JDT LS core:org.eclipse.jdt.ls.core_1.61.0.202609031315.jar;Equinox launcher:1.8.0.v20260804-1928。
- 项目:本地桌面中文目录下的合成 Maven 单模块 Java 17 项目,7 个 Java 文件,源码合计 2,943 字节,无第三方依赖。包含 Controller、具体 Service、record、接口及两个实现类。此项统计不含生成物/依赖缓存。
- 同一测试项目已用
javac --release 17编译并执行自检成功。Maven 导入尚未完成;故障前没有证据证明 Maven 进程已经运行,因此不以终端 Maven 版本冒充实际导入工具版本。项目 JDK 的最终解析结果未取得。 - 日志中的启动参数包括
-Xmx2048m -Dlog.level=ALL -jar <PLUGIN>/language-server/plugins/org.eclipse.equinox.launcher_1.8.0.v20260804-1928.jar。 - 故障窗口:2026-10-26 19:35~19:42 PDT(日志 UTC 为 2026-10-27 02:35~02:42)。截图为暗色主题。
- 未采集:最后正常版本、冷/热缓存对照、禁用其他插件后的结果、当时的 CPU/磁盘采样与准确窗口数。没有进行清缓存、重装、改 JDK、禁插件或修改安装目录等隔离操作。
- 网络/代理与 Maven 仓库配置未采集:当前明确错误发生于 Equinox 应用启动阶段,尚无证据关联依赖下载。远程、Windows/Parallels、WSL、容器不适用于本次故障环境。没有发现权限拒绝证据,未额外采集安全软件状态。
Steps to reproduce / 复现步骤
- 使用上述本地 macOS preview 构建,打开中文路径下的单模块 Maven Java 测试项目;pom.xml 设置
maven.compiler.source/target=17,无第三方依赖。 - 打开
src/main/java/demo/Main.java或controller/OrderController.java,等待 Java 服务,并尝试类/方法定义导航。 - 观察 Java 状态和底部 Definitions 面板。用户截图显示状态在
Initializing Java LSP、Java LSP exited unexpectedly、Java project preparation failed、Importing Java project and depen...之间反复切换。 - 本轮未主动重启产品重复实验;反复启动/退出由同次故障会话的实际日志证明。触发初始化失败是否必须包含中文目录或本地导航修改,尚未隔离验证。
Expected behavior / 预期行为
Java Support 应以正确的 JDT LS 启动方式加载平台 config.ini,进入就绪状态并提供定义导航。初始化失败应保留明确原因、限制自动重试并提供可控恢复入口;不应在短时间内无限重启,也不应将 Equinox 日志和 OSGi 状态写入 app bundle。
Actual behavior / 实际行为
- Java 项目准备持续失败,服务反复退出和重新初始化,无法正常验收 Java 语义导航。文本编辑仍可用,测试项目可在外部 javac 自检,因此选择 P1。
- 固定日志快照从 02:35:05.447Z 到 02:42:26.990Z,记录 1,199 次
Language server start requested和 1,197 次Language server failed。后期连续两个启动请求间隔约 0.31 秒,退出后约 0.034 秒又开始下一轮。 - Equinox 报
IllegalStateException: Unable to acquire application service,明确提示检查org.eclipse.core.runtime与 config.ini;并非仅 UI 加载动画未消失。 - 在运行包
<APP>/Contents/Resources/OfficialPlugins/dev.lithe.plugin.java-support/language-server/configuration/中实测已有 1,133 个 .log 文件(采样早于上述计数快照,不能把两个数字当作同一时点)。运行期写入发布资源目录也破坏 bundle 只读边界。 - 底部仍残留 Definitions 两个结果,两条均指向 Main.java;这是截图观察,尚未证明和 LSP 启动失败具有同一根因。
初步原因分析(日志与源码互相印证,尚未通过修复验证):
macos/Sources/LitheLanguageIntelligenceModule/Runtime/LanguageServerSession.swift 的插件分支调用 core.startPluginLanguageServer(...),未像非插件分支一样传入 hostIntegrationLaunch 中的 runtimeExecutableURL、jdtlsLaunchResources 及 cache 上下文。Java 插件已经声明 hostIntegration.id=jdt 和 configuration/arm64 资源,但此次进程却直接运行 Equinox JAR,并收到 --java-executable / --jvm-arg=... 这组包装脚本参数,而没有有效的 -configuration。
rust/lithe-core/src/lsp/interface/engine.rs::start_server 仅在收到 jdtls_launch_resources 时准备可写配置区;缺失后可能落入 rust/lithe-core/src/lsp/languages/jdt.rs::wrapper_arguments。这与本次 Equinox 自身日志的参数及 bundle 内日志位置一致。自动重试为什么没有退避/熔断仍需单独沿调用者确认。
查重:已检索 Java LSP、JDTLS 重启、Java 循环、process exited、config.ini、acquire application service。#1052 为 Windows 导入阶段 serviceReadyTimeout;#591 为长任务 deadline;#177 为旧 Windows 包初始化失败。均与本次 macOS 插件 JAR 启动参数及持续重启证据不同,未发现相同报告。
Logs or diagnostic output / 日志或诊断输出
# 来源:本次故障会话 ~/Library/Logs/Lithe/language/ 下的语言日志。
# 身份路径、会话/window/operation ID 均已省略或替换。
2026-10-27T02:40:56.982Z ERROR Language server failed: Language-server process exited.
2026-10-27T02:40:57.016Z INFO Language server start requested: <WORKSPACE>
2026-10-27T02:40:57.034Z INFO Starting language server:
<PLUGIN>/runtime/arm64/bin/java -Xmx2048m -Dlog.level=ALL -jar <PLUGIN>/language-server/plugins/org.eclipse.equinox.launcher_1.8.0.v20260804-1928.jar
2026-10-27T02:40:57.048Z INFO Java language service process started:
stage=processStart cacheDisposition=new workspaceFingerprintPresent=false
2026-10-27T02:40:57.107Z WARN Java Run marker request failed: Java language server is initializing.
2026-10-27T02:40:57.292Z ERROR Language server failed: Language-server process exited.
2026-10-27T02:40:57.326Z INFO Language server start requested: <WORKSPACE>
# 来源:运行 app bundle 内 language-server/configuration/<TIMESTAMP>.log。
!SESSION 2026-10-26 19:40:35.656
java.version=21.0.12.1
java.vendor=Eclipse Adoptium
BootLoader constants: OS=macosx, ARCH=aarch64, WS=cocoa, NL=zh_US_#Hans
Framework arguments: --java-executable <SYSTEM_JDK_21>/bin/java --jvm-arg=-Xms256m --jvm-arg=-Xmx2048m --jvm-arg=-Djava.import.generatesMetadataFilesAtProjectRoot=false
Command-line arguments: --java-executable <SYSTEM_JDK_21>/bin/java --jvm-arg=-Xms256m --jvm-arg=-Xmx2048m --jvm-arg=-Djava.import.generatesMetadataFilesAtProjectRoot=false -data <TEMP>/lithe-lsp/jdtls/<WORKSPACE_HASH>
!ENTRY org.eclipse.osgi 4 0 2026-10-26 19:40:35.798
!MESSAGE Application error
!STACK 1
java.lang.IllegalStateException: Unable to acquire application service. Ensure that the org.eclipse.core.runtime bundle is resolved and started (see config.ini).
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:92)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:467)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:298)
at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:615)
at org.eclipse.equinox.launcher.Main.basicRun(Main.java:563)
at org.eclipse.equinox.launcher.Main.run(Main.java:1415)
at org.eclipse.equinox.launcher.Main.main(Main.java:1387)Screenshots or recordings / 截图或录屏
用户提供的同次故障截图;画面仅包含合成测试项目及状态提示,已检查画面与 PNG 元数据。
Checklist / 提交前检查
- I searched existing issues for duplicates. / 我已搜索现有 Issue,确认没有重复报告。
- I removed secrets and personal data from the report. / 我已从报告中移除敏感信息和个人数据。



Activity
xiaoyumuxi commentedon Oct 27, 2026
这个是因为还在拆跟迁移 Java 的东西导致的吧
arkleselect commentedon Oct 27, 2026
对和插件相关 我待会提个PR看能不能解决
1lck commentedon Oct 28, 2026
这个我今天也复现了。
fix(macos): 修复 Java 启动竞态、插件启动参数与无限重试 (#1526)
arkleselect commentedon Oct 28, 2026
#1526
Preview (#1570)