dsh-java-mcp:在 DSH 中接入基于 JDT 的 Java 语义分析

前言

在 DSH 里让模型改 Java 代码时,常见做法是依赖 grep 或全文搜索:名字相近的符号、注释里的字符串、无关类上的同名方法都会进结果集,引用关系和重载也解析不准。下面介绍的 dsh-java-mcp 是 DeepSeek Harness 的一个 bundle,把 JavaLens MCP 服务接到 DSH 里;JavaLens 基于 Eclipse JDT,安装并启用后,模型可通过 mcp__javalens__* 命名空间下的工具做编译器级别的符号查找、引用、层次结构、诊断与重构类分析,而不是纯文本匹配。

这是什么

dsh-java-mcp(GitHub:weymann/dsh-java-mcp)由 weymann(Bernd Weymann)维护,在 SkillHub 目录中归类为「工作流」。它不是单独实现的 Java 分析引擎,而是通过 cordis.patch.yml 把 JavaLens MCP 客户端配置打进 DSH profile,使约 75 个 JavaLens 工具在会话里以原生 DSH 工具形式可用。插件当前包版本为 0.1.0,许可证 MIT。

核心能力(资料中已说明)

启用 bundle 并完成会话内的项目加载后,模型可使用的分析类型包括但不限于:

  • 符号搜索、查找引用、类型层次、调用层次
  • 诊断与快速修复(get_diagnostics、diagnose_and_fix、get_quick_fixes、apply_quick_fix 等;JavaLens 返回文本编辑,由模型侧文件工具写入,便于审查)
  • 变更影响分析(analyze_change_impact)
  • 数据流 / 控制流分析
  • 重构类操作(如 rename_symbol,按出现位置返回编辑)
  • 未使用代码查找(find_unused_code)

README 中用 JDT 与 grep 对比说明动机:例如搜索 save( 可能得到大量文本命中,而针对 UserService.save() 的 JDT 分析可区分类型、继承与重载,得到真实调用点。

每个会话开始时 JavaLens 默认未加载工程;模型需先调用 mcp__javalens__load_project(传入工作区绝对路径),此后各分析工具才可用。health_check 在加载前会报告 project.loaded: false。

环境与依赖

项 要求
DSH Desktop 或 CLI 0.2.x;文档与测试针对 0.2.1-rc.3
Node.js 需提供 npx 在 PATH 上;Desktop 自带 Node 24.21 与 pnpm,但不含 npm/npx,纯 Desktop 环境需另行安装 Node LTS 或按 README 调整 launcher
Java 21 及以上(java -version),且对 DSH 进程可通过 PATH 或 JAVA_HOME 访问
网络 首次启动经 npx 下载 javalens-mcp(约 38 MB),之后走 npx 缓存
操作系统 Windows、macOS、Linux

Bundle 默认通过 npx -y javalens-mcp@1.5.3 拉起 MCP 服务;单次工具调用超时默认 120000 ms;failOnStartupError 默认为 false(缺少 Java/npx 时 DSH 仍可启动,但工具不可用并会记日志)。

安装与启用

DSH 的 desktop profile 由 Electron 应用独占管理,CLI 的 dsh plugin --profile desktop … 会被拒绝;Desktop 使用独立 harness 目录(如 Windows 下 %APPDATA%\dsh-desktop\harness),与另一套 CLI 安装不互通。

Desktop 应用(推荐)

  1. 打开侧边栏 Plugins 页面。
  2. 在安装框输入 GitHub 地址或本地路径,例如:
github:weymann/dsh-java-mcp

也可使用 URL https://github.com/weymann/dsh-java-mcp,或本地检出绝对路径(如 C:\Projects\dsh-java-mcp)。

  1. 执行安装。DSH 根据 package.json 中的 dsh.bundle 识别 bundle 并加入 profile 依赖;插件页会显示已安装但尚未启用——仅安装不会写入 dsh.profile.bundles。
  2. 在安装对话框点 Enable now,或在卡片上打开开关;此后 bundle 进入 dsh.profile.bundles,并应用 cordis.patch.yml,无需手改 YAML。
  3. 若聊天中未立刻出现 mcp__javalens__* 工具,重启应用。

GitHub 方式要求仓库可从本机经 git 访问;本地路径适合最快试用。

CLI(自有 profile:web、headless)

在 Java 项目目录下,选用与 DSH 版本一致的 CLI,例如:

cd C:\path\to\my-java-project
npx --yes @deepseek-ai/dsh@0.2.1-rc.3 plugin --profile web add github:weymann/dsh-java-mcp
npx --yes @deepseek-ai/dsh@0.2.1-rc.3 web

启动后在对话中让模型加载工程即可;模型通常能从会话上下文得知工作区路径,例如提示「加载本工作区 Java 项目并列出未使用方法」。

从检出目录开发安装时:Desktop 用绝对路径安装;CLI 可用 dsh plugin --profile web add file:C:/Projects/dsh-java-mcp(file: 会复制到 profile,改 patch 后需重装;link: 可用于 pnpm 联调)。

典型用法(README 中的可复现起点)

无特殊 DSL:安装并启用后,用自然语言描述目标即可。README 给出四类常见起点:

1. 一次性处理可修复的诊断

Load the Java project in this workspace with JavaLens, then fix every fixable diagnostic: use diagnose_and_fix, apply the returned text edits to the source files, and re-run get_diagnostics until it is clean.

2. 清理死代码

Find unused methods and fields with find_unused_code, remove the ones that are clearly dead, and list what you deleted and where.

3. 全项目安全重命名

Rename Service.describeAll to summarizeAll using rename_symbol, apply the edits in all affected files, and verify with get_diagnostics that nothing broke.

4. 改签名前评估影响面

I want to change the signature of Service.describeAll. Before touching anything, use analyze_change_impact and the call hierarchy to list every affected file and call site, then summarize the risk. If the project has tests, also name the tests that would need to run.

安装成功后可在聊天中试一句:list all methods in demo.Foo,由模型调用 JavaLens 工具。

可选配置

默认 MCP 客户端 id 为 mcp-javalens,工具前缀 mcp__javalens__*。若希望固定工程在启动时自动加载,可为 DSH 进程(及继承到 MCP 子进程)设置环境变量 JAVA_PROJECT_PATH,并重启 DSH;也可在 profile 的 cordis.patch.yml 中按 id 整体覆盖 mcp-javalens 配置(覆盖时需重复填写各字段,例如 command、args、env、toolCallTimeoutMs 等)。README 还给出了 JAVALENS_LOG_LEVEL 等 env 示例。

适用场景与注意

适合需要在 DSH 对话里做语义级 Java 导航、诊断、影响分析与重构准备的团队或个人:已有 Java 21+ 与可用的 npx(或按文档改用等价 launcher),且接受每个会话先 load_project 的一次性成本。

插件以当前 DSH 进程的权限拉起 MCP 并访问你指定的工作区;安装前建议在 GitHub 仓库 查看源码与 MIT 许可证,确认符合组织安全策略。SkillHub(目录页)是社区插件索引,与 DeepSeek / 幻方无官方应用商店从属关系;DSH 生态主张「一切皆插件」,按需选用即可。

结尾

dsh-java-mcp 的价值在于用 bundle 方式把 JavaLens(JDT)接进 DSH,让模型用 mcp__javalens__* 做编译器准确的 Java 分析,而不是仅靠文本搜索。更多信息见 SkillHub 目录 与 GitHub:weymann/dsh-java-mcp。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜