前言¶
在 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 應用(推薦)¶
- 打開側邊欄 Plugins 頁面。
- 在安裝框輸入 GitHub 地址或本地路徑,例如:
github:weymann/dsh-java-mcp
也可使用 URL https://github.com/weymann/dsh-java-mcp,或本地檢出絕對路徑(如 C:\Projects\dsh-java-mcp)。
- 執行安裝。DSH 根據
package.json中的dsh.bundle識別 bundle 並加入 profile 依賴;插件頁會顯示已安裝但尚未啓用——僅安裝不會寫入dsh.profile.bundles。 - 在安裝對話框點 Enable now,或在卡片上打開開關;此後 bundle 進入
dsh.profile.bundles,並應用cordis.patch.yml,無需手改 YAML。 - 若聊天中未立刻出現
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-runget_diagnosticsuntil 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.describeAlltosummarizeAllusingrename_symbol, apply the edits in all affected files, and verify withget_diagnosticsthat nothing broke.
4. 改簽名前評估影響面
I want to change the signature of
Service.describeAll. Before touching anything, useanalyze_change_impactand 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。