Java MCP服务器和Gemini扩展
该项目是AI代理和Java代码库之间的高性能桥梁。它的功能既是 模型上下文协议(MCP)服务器 和一个 Gemini CLI扩展,通过Eclipse JDT提供专业级Java语言智能。LS。
🌟 主要特点
- 双子座扩展和代理技能:采用结构化预包装 代理技能 对于导航、验证和生命周期管理,确保AI代理遵循最佳工作流程。
- 原生JDT。LS启动:通过JVM直接生成Java语言服务器,以获得最大的稳定性和性能。
- 企业级分析:支持加载整个Maven项目,以解决整个代码库中的依赖关系和符号。
- 诊断支持实时检索编译错误和警告,以帮助AI代理验证其代码更改。
- 环境和实例隔离:对隔离的数据目录使用工作区路径哈希,并自动清除冲突的环境变量(如
PORT)为了实现可靠的通信。 - 完整的LSP功能:支持转到定义、查找引用、悬停文档、全局符号搜索和文档符号提取。
🛠️ 先决条件
- Node.js:v18.0.0或更高版本。
- Java开发工具包(JDK):Java 17或更高版本(建议使用Java 21+)。
- Eclipse JDT。LS:安装 Eclipse JDT。LS.
🚀 安装和设置
适用于Gemini CLI(扩展模式)
此项目已针对用作Gemini CLI扩展进行了优化。
# Clone the repository
git clone
cd java-jdtls-mcp-server
npm install && npm run build
# Install as Gemini extension
gemini extensions install .适用于Claude Code/其他MCP客户
对于Claude Code、Claude Desktop或其他MCP客户端,您需要将服务器明确配置为MCP工具。
- 按照上图所示构建项目。
- 编辑客户的配置文件(例如。,
claude_desktop_config.json克劳德桌面)。 - 添加服务器配置,并直接在
env章节:
{
"mcpServers": {
"java-mcp-server": {
"command": "node",
"args": [
"/absolute/path/to/java-jdtls-mcp-server/dist/index.js"
],
"env": {
"JDTLS_HOME": "D:/software/jdt-language-server-latest",
"JDTLS_JAVA_HOME": "D:/software/java/jdk-23.0.1",
"JDTLS_JAVA_RUNTIMES": "[{\"name\":\"JavaSE-1.8\",\"path\":\"C:/Program Files/Java/jdk1.8.0_361\"},{\"name\":\"JavaSE-17\",\"path\":\"D:/software/jdk-17.0.7\"}]",
"JDTLS_MAVEN_USER_SETTINGS": "D:/software/apache-maven-3.9.3/conf/settings.xml",
"JDTLS_MAVEN_GLOBAL_SETTINGS": "D:/software/apache-maven-3.9.3/conf/settings.xml"
}
}
}
}*注意:使用Claude Code时,项目级别 .env 文件逻辑(如 JAVA_PROJECT=true)除非特定的MCP客户端实现支持,否则可能不会以本机方式加载。您可能需要直接在客户端的配置中管理特定于项目的变量。*
1.全局设置(用户级 .env)
建议将全局环境变量用于公共路径,以避免在每个项目中重复它们。全局配置文件通常位于: USER_HOME\.gemini\extensions\java-jdtls-mcp-server\.env (其中 USER_HOME 是您的用户目录。, C:\Users\User1).
如何配置:
- 安装期间(推荐): 如果您已启用
experimental.extensionConfig在Gemini CLI中设置时,在初始安装过程中将提示您输入这些环境变量。Gemini CLI将自动生成.env文件位于上面的路径。 - 手动配置: 或者,您可以手动创建用户级别
.env在此位置归档并填写推荐信息。
推荐配置示例:
JDTLS_HOME=D:/software/jdt-language-server-latest
JDTLS_JAVA_HOME=D:/software/java/jdk-23.0.1
JAVA_WORKSPACE_PATH=
JDTLS_JAVA_RUNTIMES=[{"name":"JavaSE-1.8","path":"C:/Program Files/Java/jdk1.8.0_361"},{"name":"JavaSE-17","path":"D:/software/jdk-17.0.7"}]
JDTLS_MAVEN_USER_SETTINGS=D:/software/apache-maven-3.9.3/conf/settings.xml
JDTLS_MAVEN_GLOBAL_SETTINGS=D:/software/apache-maven-3.9.3/conf/settings.xml| 变量 | 描述 | 必填 | 默认 |
|---|---|---|---|
JDTLS_HOME | 通往JDT的道路。LS安装根目录 | 是 | - |
JDTLS_JAVA_HOME | JDT的专用JDK路径。LS(覆盖 JAVA_HOME) | 否 | 系统 JAVA_HOME |
JAVA_WORKSPACE_PATH | Java项目的根路径 | 否 | 当前工作目录 |
JDTLS_JAVA_RUNTIMES | 不同项目版本的Java运行时JSON列表 | 否 | - |
JDTLS_MAVEN_USER_SETTINGS | 自定义Maven用户的路径 settings.xml | 否 | - |
JDTLS_MAVEN_GLOBAL_SETTINGS | 自定义Maven全局路径 settings.xml | 否 | - |
JDTLS_MAVEN_OFFLINE | 启用Maven脱机模式(true/false) | 没有 | false |
2.项目级激活(项目级 .env)
项目级环境信息由Gemini CLI等代理工具加载和读取。例如,使用Gemini CLI时,项目级环境路径通常为: [Project Root]/.gemini/.env.
为了防止Java语言服务器在非Java项目中不必要地启动,您可以 必须明确启用它 每个项目。请将以下内容添加到您的项目级别 .env 文件:
# REQUIRED: Activates the Java Language Server for this specific workspace
JAVA_PROJECT=true*(可选)* 您还可以将任何全局设置放置在此本地 .env 文件以覆盖特定项目的它们。
🧩 专家技能和人工智能规则
该项目提供了一套高级 专业技能 (位于 skills/)指导AI代理以最有效的方式与Java语言服务器交互。这些技能可以防止常见的陷阱(如冗余的服务器重启),并提高代码智能的准确性。
| 技能 | 专家指南 | 主要优势 |
|---|---|---|
java-lifecycle | 服务器管理 | 标准化JDT。LS启动、状态检查和错误恢复。 |
java-navigation | 代码智能 | 优化查找定义、引用和符号。 |
java-project-load | 项目索引 | 无需手动文件扫描即可加速Maven项目加载。 |
java-verification | 诊断 | 强制执行实时错误检查和验证。 |
🚀 Gemini CLI中的用法
Gemini CLI可以将这些技能作为扩展的一部分进行安装。安装后,它们会自动或按需激活:
activate_skill java-lifecycleactivate_skill java-navigation
🤖 在Claude Code/其他MCP客户端中的使用
虽然Claude Code不支持Gemini的扩展打包,但它仍然可以通过其 规则 系统:
- 项目级规则:复制内容(或相关部分)
SKILL.md文件来自skills/目录到a.clauderulesJava项目根目录中的文件。 - 全球规则:或者,您可以将这些指令添加到全局Claude配置中。
通过将这些规则放入 .clauderules,只要检测到此项目环境中工作,Claude Code就会自动采用这些“专家工作流”。
______________________________________________________________________
🧰 可用工具
| 工具名称 | 描述 | 关键参数 |
|---|---|---|
java_start | 初始化JDT。LS。如果已在运行,则重新启动。 | jdtlsHome, workspacePath, javaHome |
java_restart | 迫使JDT重新启动。LS流程。 | jdtlsHome, workspacePath, javaHome |
java_load_maven_project | 新 加载整个Maven项目并索引符号。 | projectPath |
java_search_symbols | 新 在整个工作区中执行全局符号搜索。 | query |
java_get_file_symbols | 新 从文件中提取所有符号(类/方法)。 | filePath |
java_open_file | 通知服务器文件内容(诊断所需)。 | filePath, content |
java_get_diagnostics | 检索特定文件的错误和警告。 | filePath |
java_get_definition | 检索符号的定义位置。 | filePath, line, character |
java_get_references | 查找符号的所有引用。 | filePath, line, character |
java_get_hover | 获取符号的类型信息和文档。 | filePath, line, character |
🧠 代理技能
文件夹 skills/ 包含专门的Markdown文件,指导AI代理如何有效地使用这些工具:
📚 设计文件
该项目遵循结构化的设计流程。详细的技术文件可以在 design/ 目录:
📄 许可证
该项目根据ISC许可证获得许可。
