Skip to content

[Bug] macOS Java 插件启动 JDT LS 后立即退出并持续重启,日志写入 app bundle #1523

Closed

Description

@arkleselect

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 / 复现步骤

  1. 使用上述本地 macOS preview 构建,打开中文路径下的单模块 Maven Java 测试项目;pom.xml 设置 maven.compiler.source/target=17,无第三方依赖。
  2. 打开 src/main/java/demo/Main.java 或 controller/OrderController.java,等待 Java 服务,并尝试类/方法定义导航。
  3. 观察 Java 状态和底部 Definitions 面板。用户截图显示状态在 Initializing Java LSP、Java LSP exited unexpectedly、Java project preparation failed、Importing Java project and depen... 之间反复切换。
  4. 本轮未主动重启产品重复实验;反复启动/退出由同次故障会话的实际日志证明。触发初始化失败是否必须包含中文目录或本地导航修改,尚未隔离验证。

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 元数据。

初始化与准备失败
Java LSP 意外退出
导入与初始化交替

Checklist / 提交前检查

  • I searched existing issues for duplicates. / 我已搜索现有 Issue,确认没有重复报告。
  • I removed secrets and personal data from the report. / 我已从报告中移除敏感信息和个人数据。

Activity

  1. added
    bugSomething isn't working
    P1尽快处理:使用体验大幅下降,但通常仍可继续使用
    on Oct 27, 2026
  2. xiaoyumuxi commented on Oct 27, 2026

    @xiaoyumuxi
    Collaborator

    这个是因为还在拆跟迁移 Java 的东西导致的吧

  3. arkleselect commented on Oct 27, 2026

    @arkleselect
    CollaboratorAuthor

    3. 这个是因为还在拆跟迁移 Java 的东西导致的吧

    对和插件相关 我待会提个PR看能不能解决

  4. self-assigned this
    on Oct 27, 2026
  5. 1lck commented on Oct 28, 2026

    @1lck
    Owner

    这个我今天也复现了。

  6. arkleselect commented on Oct 28, 2026

    @arkleselect
    CollaboratorAuthor
  7. added a commit that references this issue on Oct 29, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

P1尽快处理:使用体验大幅下降,但通常仍可继续使用area:languagebugSomething isn't workingplatform:macosMacOS的需求review: mediumghfind author score; see https://ghfind.com

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions