# Easy JAR Reader
一个用于从 Maven 依赖中读取 Java 源代码的 MCP (Model Context Protocol) 服务器。
[](https://badge.fury.io/py/easy-jar-reader)
[](https://pypi.org/project/easy-jar-reader/)
[](https://opensource.org/licenses/MIT)
> **📢 发布状态**:
> - ✅ **已发布到 PyPI** - 可以直接使用 `uvx easy-jar-reader` 开箱即用
> - 🔄 **未发布到 PyPI** - 需要先从 GitHub 安装(见下方说明)
>
> 请根据实际发布状态选择对应的安装方式。
## 功能特性
- 📦 **从 Maven 仓库读取源代码**:自动从本地 Maven 仓库(`~/.m2/repository`)中查找和读取 JAR 包源代码
- 🔍 **智能源码提取**:优先从 sources jar 提取源码,如果不存在则自动反编译 class 文件
- 🛠️ **Fernflower 反编译器支持**:使用 IntelliJ IDEA 的 Fernflower 反编译器
- ⚡ **智能缓存机制**:反编译结果缓存在 JAR 包同目录的 `easy-jar-reader/` 下,避免重复反编译
- ⚙️ **自定义 Maven 路径**:支持配置自定义的 Maven 仓库路径
- 📄 **智能内容管理**:自动摘要大型源文件,支持行数限制
## 前置要求
- Python 3.10 或更高版本
- Java Development Kit (JDK) - 用于运行反编译器
- [uv](https://github.com/astral-sh/uv) - Python 包和项目管理工具(推荐)
## 安装
### ⚡ 方式 1: 使用 uvx(推荐 - 开箱即用)
> **注意**: 此方式仅在包发布到 PyPI 后可用
[uv](https://github.com/astral-sh/uv) 是一个极快的 Python 包和项目管理工具。使用 `uvx` 可以无需预先安装,直接运行:
```bash
# 无需安装,直接运行
uvx easy-jar-reader
# 或指定自定义 Maven 仓库
uvx easy-jar-reader --maven-repo /path/to/maven/repository
```
#### 首次使用 uv?
如果您还没有安装 uv,可以通过以下方式快速安装:
```bash
# macOS/Linux
curl -LsSf https://astral.sh/uv/install.sh | sh
# Windows
powershell -c "irm https://astral.sh/uv/install.ps1 | iex"
# 或使用 pip
pip install uv
```
### 📦 方式 2: 从 PyPI 安装
> **注意**: 此方式仅在包发布到 PyPI 后可用
```bash
# 使用 uv 安装(推荐)
uv pip install easy-jar-reader
# 或使用 pip 安装
pip install easy-jar-reader
```
安装后可以直接运行:
```bash
easy-jar-reader
easy-jar-reader --maven-repo /path/to/maven/repository
```
### 🔧 方式 3: 从 GitHub 安装(当前可用)
在包发布到 PyPI 之前,或者您想使用最新开发版本,可以从 GitHub 安装:
```bash
# 使用 uv 安装
uv pip install git+https://github.com/FangYuan33/easy-jar-reader.git
# 或使用 pip 安装
pip install git+https://github.com/FangYuan33/easy-jar-reader.git
```
### 🛠️ 方式 4: 本地开发安装
克隆仓库并以开发模式安装:
```bash
# 克隆仓库
git clone https://github.com/FangYuan33/easy-jar-reader.git
cd easy-jar-reader
# 使用 uv 安装
uv pip install -e .
# 或使用 pip 安装
pip install -e .
# 开发模式安装(包含测试工具)
uv pip install -e ".[dev]"
# 或
pip install -e ".[dev]"
```
## 使用方法
### 快速开始(使用 uvx - 推荐)
使用 `uvx` 可以直接运行 Easy JAR Reader,无需手动安装:
```bash
# 使用默认 Maven 仓库路径 (~/.m2/repository)
uvx easy-jar-reader
# 指定自定义 Maven 仓库路径
uvx easy-jar-reader --maven-repo /path/to/your/maven/repository
# 查看帮助信息
uvx easy-jar-reader --help
```
### 使用已安装的包
如果您已经通过 pip 或 uv 安装了包,可以直接运行:
```bash
# 使用默认 Maven 仓库路径
easy-jar-reader
# 指定自定义 Maven 仓库路径
easy-jar-reader --maven-repo /path/to/your/maven/repository
# 或使用 Python 模块方式运行
python -m easy_jar_reader
python -m easy_jar_reader --maven-repo /path/to/your/maven/repository
```
### 在 MCP 客户端中配置
Easy JAR Reader 实现了 Model Context Protocol,可以与支持 MCP 的客户端(如 Claude Desktop)集成。
#### Claude Desktop 配置
编辑 Claude Desktop 的配置文件:
- macOS: `~/Library/Application Support/Claude/claude_desktop_config.json`
- Windows: `%APPDATA%\Claude\claude_desktop_config.json`
- Linux: `~/.config/Claude/claude_desktop_config.json`
##### 方式 1:使用 uvx(推荐 - 开箱即用)
```json
{
"mcpServers": {
"easy-jar-reader": {
"command": "uvx",
"args": ["easy-jar-reader"],
"env": {}
}
}
}
```
##### 使用 uvx 并指定自定义 Maven 路径:
```json
{
"mcpServers": {
"easy-jar-reader": {
"command": "uvx",
"args": [
"easy-jar-reader",
"--maven-repo",
"/custom/path/to/maven/repository"
],
"env": {}
}
}
}
```
##### 方式 2:使用已安装的包
```json
{
"mcpServers": {
"easy-jar-reader": {
"command": "easy-jar-reader",
"args": [],
"env": {}
}
}
}
```
##### 方式 3:使用 Python 模块
```json
{
"mcpServers": {
"easy-jar-reader": {
"command": "python",
"args": ["-m", "easy_jar_reader"],
"env": {}
}
}
}
```
##### 指定自定义 Maven 路径(Python 模块方式):
```json
{
"mcpServers": {
"easy-jar-reader": {
"command": "python",
"args": [
"-m",
"easy_jar_reader",
"--maven-repo",
"/custom/path/to/maven/repository"
],
"env": {}
}
}
}
```
## 工具说明
### read_jar_source
从 Maven 依赖中读取 Java 类的源代码。
**参数:**
- `group_id` (必需): Maven group ID,例如 `org.springframework`
- `artifact_id` (必需): Maven artifact ID,例如 `spring-core`
- `version` (必需): Maven version,例如 `5.3.21`
- `class_name` (必需): 完全限定的类名,例如 `org.springframework.core.SpringVersion`
- `prefer_sources` (可选,默认 `true`): 优先使用 sources jar 而不是反编译
- `summarize_large_content` (可选,默认 `true`): 自动摘要大型内容
- `max_lines` (可选,默认 `500`): 返回的最大行数,设为 `0` 返回全部内容
**示例:**
```json
{
"group_id": "org.springframework",
"artifact_id": "spring-core",
"version": "5.3.21",
"class_name": "org.springframework.core.SpringVersion"
}
```
**返回格式:**
```json
{
"source": "sources-jar",
"class_name": "org.springframework.core.SpringVersion",
"artifact": "org.springframework:spring-core:5.3.21",
"code": "package org.springframework.core;\n\npublic class SpringVersion {\n // ...\n}"
}
```
## 反编译器
Easy JAR Reader 使用 **Fernflower** 反编译器(IntelliJ IDEA 使用的反编译器)。
反编译后的文件会被缓存在 JAR 包所在目录的 `easy-jar-reader/` 子目录中,例如:
如果 JAR 包位置为:
```
/Users/username/maven/repository/com/example/mylib/1.0.0/mylib-1.0.0.jar
```
反编译后的源文件将存储在:
```
/Users/username/maven/repository/com/example/mylib/1.0.0/easy-jar-reader/mylib-1.0.0/
```
这样可以避免重复反编译相同的 JAR 包,提高性能。
Fernflower JAR 文件已包含在 `decompilers/` 目录中:
- `decompilers/fernflower.jar`
## 环境变量配置
除了命令行参数,还可以通过环境变量配置:
- `MAVEN_REPO`: 自定义 Maven 仓库路径
- `M2_HOME`: Maven 主目录(将使用 `$M2_HOME/repository`)
- `MCP_MAX_RESPONSE_SIZE`: 最大响应大小(字节),默认 50000
- `MCP_MAX_TEXT_LENGTH`: 最大文本长度,默认 10000
- `MCP_MAX_LINES`: 最大行数,默认 500
## 开发
### 运行测试
```bash
# 运行所有测试
pytest tests/
# 运行特定测试
pytest tests/test_jar_reader.py -v
```
### 项目结构
```
easy-jar-reader/
├── src/easy_jar_reader/
│ ├── __init__.py
│ ├── __main__.py # 程序入口点
│ ├── server.py # MCP 服务器实现
│ ├── config.py # 配置管理
│ ├── decompiler.py # 反编译器集成
│ └── response_manager.py # 响应管理器
├── decompilers/ # 反编译器 JAR 文件
│ └── fernflower.jar # Fernflower 反编译器
├── tests/ # 测试文件
├── pyproject.toml # Python 项目配置
├── requirements.txt # Python 依赖
└── README.md # 本文档
```
## 许可证
MIT License
## 贡献
欢迎提交 Issue 和 Pull Request!
## 致谢
本项目参考了 [maven-decoder-mcp](https://github.com/salitaba/maven-decoder-mcp) 的部分实现。
Raw data
{
"_id": null,
"home_page": null,
"name": "easy-jar-reader",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.10",
"maintainer_email": "FangYuan33 <fangyuan33@example.com>",
"keywords": "mcp, model-context-protocol, maven, jar, java, decompiler, source-code, fernflower, claude, ai-tools",
"author": null,
"author_email": "FangYuan33 <fangyuan33@example.com>",
"download_url": "https://files.pythonhosted.org/packages/1c/66/8861b26559a35b24cfb031f6ff596043a0f2d3db6b2df4ab028da964ed58/easy_jar_reader-0.1.3.tar.gz",
"platform": null,
"description": "# Easy JAR Reader\n\n\u4e00\u4e2a\u7528\u4e8e\u4ece Maven \u4f9d\u8d56\u4e2d\u8bfb\u53d6 Java \u6e90\u4ee3\u7801\u7684 MCP (Model Context Protocol) \u670d\u52a1\u5668\u3002\n\n[](https://badge.fury.io/py/easy-jar-reader)\n[](https://pypi.org/project/easy-jar-reader/)\n[](https://opensource.org/licenses/MIT)\n\n> **\ud83d\udce2 \u53d1\u5e03\u72b6\u6001**: \n> - \u2705 **\u5df2\u53d1\u5e03\u5230 PyPI** - \u53ef\u4ee5\u76f4\u63a5\u4f7f\u7528 `uvx easy-jar-reader` \u5f00\u7bb1\u5373\u7528\n> - \ud83d\udd04 **\u672a\u53d1\u5e03\u5230 PyPI** - \u9700\u8981\u5148\u4ece GitHub \u5b89\u88c5\uff08\u89c1\u4e0b\u65b9\u8bf4\u660e\uff09\n>\n> \u8bf7\u6839\u636e\u5b9e\u9645\u53d1\u5e03\u72b6\u6001\u9009\u62e9\u5bf9\u5e94\u7684\u5b89\u88c5\u65b9\u5f0f\u3002\n\n## \u529f\u80fd\u7279\u6027\n\n- \ud83d\udce6 **\u4ece Maven \u4ed3\u5e93\u8bfb\u53d6\u6e90\u4ee3\u7801**\uff1a\u81ea\u52a8\u4ece\u672c\u5730 Maven \u4ed3\u5e93\uff08`~/.m2/repository`\uff09\u4e2d\u67e5\u627e\u548c\u8bfb\u53d6 JAR \u5305\u6e90\u4ee3\u7801\n- \ud83d\udd0d **\u667a\u80fd\u6e90\u7801\u63d0\u53d6**\uff1a\u4f18\u5148\u4ece sources jar \u63d0\u53d6\u6e90\u7801\uff0c\u5982\u679c\u4e0d\u5b58\u5728\u5219\u81ea\u52a8\u53cd\u7f16\u8bd1 class \u6587\u4ef6\n- \ud83d\udee0\ufe0f **Fernflower \u53cd\u7f16\u8bd1\u5668\u652f\u6301**\uff1a\u4f7f\u7528 IntelliJ IDEA \u7684 Fernflower \u53cd\u7f16\u8bd1\u5668\n- \u26a1 **\u667a\u80fd\u7f13\u5b58\u673a\u5236**\uff1a\u53cd\u7f16\u8bd1\u7ed3\u679c\u7f13\u5b58\u5728 JAR \u5305\u540c\u76ee\u5f55\u7684 `easy-jar-reader/` \u4e0b\uff0c\u907f\u514d\u91cd\u590d\u53cd\u7f16\u8bd1\n- \u2699\ufe0f **\u81ea\u5b9a\u4e49 Maven \u8def\u5f84**\uff1a\u652f\u6301\u914d\u7f6e\u81ea\u5b9a\u4e49\u7684 Maven \u4ed3\u5e93\u8def\u5f84\n- \ud83d\udcc4 **\u667a\u80fd\u5185\u5bb9\u7ba1\u7406**\uff1a\u81ea\u52a8\u6458\u8981\u5927\u578b\u6e90\u6587\u4ef6\uff0c\u652f\u6301\u884c\u6570\u9650\u5236\n\n## \u524d\u7f6e\u8981\u6c42\n\n- Python 3.10 \u6216\u66f4\u9ad8\u7248\u672c\n- Java Development Kit (JDK) - \u7528\u4e8e\u8fd0\u884c\u53cd\u7f16\u8bd1\u5668\n- [uv](https://github.com/astral-sh/uv) - Python \u5305\u548c\u9879\u76ee\u7ba1\u7406\u5de5\u5177\uff08\u63a8\u8350\uff09\n\n## \u5b89\u88c5\n\n### \u26a1 \u65b9\u5f0f 1: \u4f7f\u7528 uvx\uff08\u63a8\u8350 - \u5f00\u7bb1\u5373\u7528\uff09\n\n> **\u6ce8\u610f**: \u6b64\u65b9\u5f0f\u4ec5\u5728\u5305\u53d1\u5e03\u5230 PyPI \u540e\u53ef\u7528\n\n[uv](https://github.com/astral-sh/uv) \u662f\u4e00\u4e2a\u6781\u5feb\u7684 Python \u5305\u548c\u9879\u76ee\u7ba1\u7406\u5de5\u5177\u3002\u4f7f\u7528 `uvx` \u53ef\u4ee5\u65e0\u9700\u9884\u5148\u5b89\u88c5\uff0c\u76f4\u63a5\u8fd0\u884c\uff1a\n\n```bash\n# \u65e0\u9700\u5b89\u88c5\uff0c\u76f4\u63a5\u8fd0\u884c\nuvx easy-jar-reader\n\n# \u6216\u6307\u5b9a\u81ea\u5b9a\u4e49 Maven \u4ed3\u5e93\nuvx easy-jar-reader --maven-repo /path/to/maven/repository\n```\n\n#### \u9996\u6b21\u4f7f\u7528 uv\uff1f\n\n\u5982\u679c\u60a8\u8fd8\u6ca1\u6709\u5b89\u88c5 uv\uff0c\u53ef\u4ee5\u901a\u8fc7\u4ee5\u4e0b\u65b9\u5f0f\u5feb\u901f\u5b89\u88c5\uff1a\n\n```bash\n# macOS/Linux\ncurl -LsSf https://astral.sh/uv/install.sh | sh\n\n# Windows\npowershell -c \"irm https://astral.sh/uv/install.ps1 | iex\"\n\n# \u6216\u4f7f\u7528 pip\npip install uv\n```\n\n### \ud83d\udce6 \u65b9\u5f0f 2: \u4ece PyPI \u5b89\u88c5\n\n> **\u6ce8\u610f**: \u6b64\u65b9\u5f0f\u4ec5\u5728\u5305\u53d1\u5e03\u5230 PyPI \u540e\u53ef\u7528\n\n```bash\n# \u4f7f\u7528 uv \u5b89\u88c5\uff08\u63a8\u8350\uff09\nuv pip install easy-jar-reader\n\n# \u6216\u4f7f\u7528 pip \u5b89\u88c5\npip install easy-jar-reader\n```\n\n\u5b89\u88c5\u540e\u53ef\u4ee5\u76f4\u63a5\u8fd0\u884c\uff1a\n\n```bash\neasy-jar-reader\neasy-jar-reader --maven-repo /path/to/maven/repository\n```\n\n### \ud83d\udd27 \u65b9\u5f0f 3: \u4ece GitHub \u5b89\u88c5\uff08\u5f53\u524d\u53ef\u7528\uff09\n\n\u5728\u5305\u53d1\u5e03\u5230 PyPI \u4e4b\u524d\uff0c\u6216\u8005\u60a8\u60f3\u4f7f\u7528\u6700\u65b0\u5f00\u53d1\u7248\u672c\uff0c\u53ef\u4ee5\u4ece GitHub \u5b89\u88c5\uff1a\n\n```bash\n# \u4f7f\u7528 uv \u5b89\u88c5\nuv pip install git+https://github.com/FangYuan33/easy-jar-reader.git\n\n# \u6216\u4f7f\u7528 pip \u5b89\u88c5\npip install git+https://github.com/FangYuan33/easy-jar-reader.git\n```\n\n### \ud83d\udee0\ufe0f \u65b9\u5f0f 4: \u672c\u5730\u5f00\u53d1\u5b89\u88c5\n\n\u514b\u9686\u4ed3\u5e93\u5e76\u4ee5\u5f00\u53d1\u6a21\u5f0f\u5b89\u88c5\uff1a\n\n```bash\n# \u514b\u9686\u4ed3\u5e93\ngit clone https://github.com/FangYuan33/easy-jar-reader.git\ncd easy-jar-reader\n\n# \u4f7f\u7528 uv \u5b89\u88c5\nuv pip install -e .\n\n# \u6216\u4f7f\u7528 pip \u5b89\u88c5\npip install -e .\n\n# \u5f00\u53d1\u6a21\u5f0f\u5b89\u88c5\uff08\u5305\u542b\u6d4b\u8bd5\u5de5\u5177\uff09\nuv pip install -e \".[dev]\"\n# \u6216\npip install -e \".[dev]\"\n```\n\n## \u4f7f\u7528\u65b9\u6cd5\n\n### \u5feb\u901f\u5f00\u59cb\uff08\u4f7f\u7528 uvx - \u63a8\u8350\uff09\n\n\u4f7f\u7528 `uvx` \u53ef\u4ee5\u76f4\u63a5\u8fd0\u884c Easy JAR Reader\uff0c\u65e0\u9700\u624b\u52a8\u5b89\u88c5\uff1a\n\n```bash\n# \u4f7f\u7528\u9ed8\u8ba4 Maven \u4ed3\u5e93\u8def\u5f84 (~/.m2/repository)\nuvx easy-jar-reader\n\n# \u6307\u5b9a\u81ea\u5b9a\u4e49 Maven \u4ed3\u5e93\u8def\u5f84\nuvx easy-jar-reader --maven-repo /path/to/your/maven/repository\n\n# \u67e5\u770b\u5e2e\u52a9\u4fe1\u606f\nuvx easy-jar-reader --help\n```\n\n### \u4f7f\u7528\u5df2\u5b89\u88c5\u7684\u5305\n\n\u5982\u679c\u60a8\u5df2\u7ecf\u901a\u8fc7 pip \u6216 uv \u5b89\u88c5\u4e86\u5305\uff0c\u53ef\u4ee5\u76f4\u63a5\u8fd0\u884c\uff1a\n\n```bash\n# \u4f7f\u7528\u9ed8\u8ba4 Maven \u4ed3\u5e93\u8def\u5f84\neasy-jar-reader\n\n# \u6307\u5b9a\u81ea\u5b9a\u4e49 Maven \u4ed3\u5e93\u8def\u5f84\neasy-jar-reader --maven-repo /path/to/your/maven/repository\n\n# \u6216\u4f7f\u7528 Python \u6a21\u5757\u65b9\u5f0f\u8fd0\u884c\npython -m easy_jar_reader\npython -m easy_jar_reader --maven-repo /path/to/your/maven/repository\n```\n\n### \u5728 MCP \u5ba2\u6237\u7aef\u4e2d\u914d\u7f6e\n\nEasy JAR Reader \u5b9e\u73b0\u4e86 Model Context Protocol\uff0c\u53ef\u4ee5\u4e0e\u652f\u6301 MCP \u7684\u5ba2\u6237\u7aef\uff08\u5982 Claude Desktop\uff09\u96c6\u6210\u3002\n\n#### Claude Desktop \u914d\u7f6e\n\n\u7f16\u8f91 Claude Desktop \u7684\u914d\u7f6e\u6587\u4ef6\uff1a\n- macOS: `~/Library/Application Support/Claude/claude_desktop_config.json`\n- Windows: `%APPDATA%\\Claude\\claude_desktop_config.json`\n- Linux: `~/.config/Claude/claude_desktop_config.json`\n\n##### \u65b9\u5f0f 1\uff1a\u4f7f\u7528 uvx\uff08\u63a8\u8350 - \u5f00\u7bb1\u5373\u7528\uff09\n\n```json\n{\n \"mcpServers\": {\n \"easy-jar-reader\": {\n \"command\": \"uvx\",\n \"args\": [\"easy-jar-reader\"],\n \"env\": {}\n }\n }\n}\n```\n\n##### \u4f7f\u7528 uvx \u5e76\u6307\u5b9a\u81ea\u5b9a\u4e49 Maven \u8def\u5f84\uff1a\n\n```json\n{\n \"mcpServers\": {\n \"easy-jar-reader\": {\n \"command\": \"uvx\",\n \"args\": [\n \"easy-jar-reader\",\n \"--maven-repo\",\n \"/custom/path/to/maven/repository\"\n ],\n \"env\": {}\n }\n }\n}\n```\n\n##### \u65b9\u5f0f 2\uff1a\u4f7f\u7528\u5df2\u5b89\u88c5\u7684\u5305\n\n```json\n{\n \"mcpServers\": {\n \"easy-jar-reader\": {\n \"command\": \"easy-jar-reader\",\n \"args\": [],\n \"env\": {}\n }\n }\n}\n```\n\n##### \u65b9\u5f0f 3\uff1a\u4f7f\u7528 Python \u6a21\u5757\n\n```json\n{\n \"mcpServers\": {\n \"easy-jar-reader\": {\n \"command\": \"python\",\n \"args\": [\"-m\", \"easy_jar_reader\"],\n \"env\": {}\n }\n }\n}\n```\n\n##### \u6307\u5b9a\u81ea\u5b9a\u4e49 Maven \u8def\u5f84\uff08Python \u6a21\u5757\u65b9\u5f0f\uff09\uff1a\n\n```json\n{\n \"mcpServers\": {\n \"easy-jar-reader\": {\n \"command\": \"python\",\n \"args\": [\n \"-m\", \n \"easy_jar_reader\",\n \"--maven-repo\",\n \"/custom/path/to/maven/repository\"\n ],\n \"env\": {}\n }\n }\n}\n```\n\n## \u5de5\u5177\u8bf4\u660e\n\n### read_jar_source\n\n\u4ece Maven \u4f9d\u8d56\u4e2d\u8bfb\u53d6 Java \u7c7b\u7684\u6e90\u4ee3\u7801\u3002\n\n**\u53c2\u6570\uff1a**\n\n- `group_id` (\u5fc5\u9700): Maven group ID\uff0c\u4f8b\u5982 `org.springframework`\n- `artifact_id` (\u5fc5\u9700): Maven artifact ID\uff0c\u4f8b\u5982 `spring-core`\n- `version` (\u5fc5\u9700): Maven version\uff0c\u4f8b\u5982 `5.3.21`\n- `class_name` (\u5fc5\u9700): \u5b8c\u5168\u9650\u5b9a\u7684\u7c7b\u540d\uff0c\u4f8b\u5982 `org.springframework.core.SpringVersion`\n- `prefer_sources` (\u53ef\u9009\uff0c\u9ed8\u8ba4 `true`): \u4f18\u5148\u4f7f\u7528 sources jar \u800c\u4e0d\u662f\u53cd\u7f16\u8bd1\n- `summarize_large_content` (\u53ef\u9009\uff0c\u9ed8\u8ba4 `true`): \u81ea\u52a8\u6458\u8981\u5927\u578b\u5185\u5bb9\n- `max_lines` (\u53ef\u9009\uff0c\u9ed8\u8ba4 `500`): \u8fd4\u56de\u7684\u6700\u5927\u884c\u6570\uff0c\u8bbe\u4e3a `0` \u8fd4\u56de\u5168\u90e8\u5185\u5bb9\n\n**\u793a\u4f8b\uff1a**\n\n```json\n{\n \"group_id\": \"org.springframework\",\n \"artifact_id\": \"spring-core\",\n \"version\": \"5.3.21\",\n \"class_name\": \"org.springframework.core.SpringVersion\"\n}\n```\n\n**\u8fd4\u56de\u683c\u5f0f\uff1a**\n\n```json\n{\n \"source\": \"sources-jar\",\n \"class_name\": \"org.springframework.core.SpringVersion\",\n \"artifact\": \"org.springframework:spring-core:5.3.21\",\n \"code\": \"package org.springframework.core;\\n\\npublic class SpringVersion {\\n // ...\\n}\"\n}\n```\n\n## \u53cd\u7f16\u8bd1\u5668\n\nEasy JAR Reader \u4f7f\u7528 **Fernflower** \u53cd\u7f16\u8bd1\u5668\uff08IntelliJ IDEA \u4f7f\u7528\u7684\u53cd\u7f16\u8bd1\u5668\uff09\u3002\n\n\u53cd\u7f16\u8bd1\u540e\u7684\u6587\u4ef6\u4f1a\u88ab\u7f13\u5b58\u5728 JAR \u5305\u6240\u5728\u76ee\u5f55\u7684 `easy-jar-reader/` \u5b50\u76ee\u5f55\u4e2d\uff0c\u4f8b\u5982\uff1a\n\n\u5982\u679c JAR \u5305\u4f4d\u7f6e\u4e3a\uff1a\n```\n/Users/username/maven/repository/com/example/mylib/1.0.0/mylib-1.0.0.jar\n```\n\n\u53cd\u7f16\u8bd1\u540e\u7684\u6e90\u6587\u4ef6\u5c06\u5b58\u50a8\u5728\uff1a\n```\n/Users/username/maven/repository/com/example/mylib/1.0.0/easy-jar-reader/mylib-1.0.0/\n```\n\n\u8fd9\u6837\u53ef\u4ee5\u907f\u514d\u91cd\u590d\u53cd\u7f16\u8bd1\u76f8\u540c\u7684 JAR \u5305\uff0c\u63d0\u9ad8\u6027\u80fd\u3002\n\nFernflower JAR \u6587\u4ef6\u5df2\u5305\u542b\u5728 `decompilers/` \u76ee\u5f55\u4e2d\uff1a\n- `decompilers/fernflower.jar`\n\n## \u73af\u5883\u53d8\u91cf\u914d\u7f6e\n\n\u9664\u4e86\u547d\u4ee4\u884c\u53c2\u6570\uff0c\u8fd8\u53ef\u4ee5\u901a\u8fc7\u73af\u5883\u53d8\u91cf\u914d\u7f6e\uff1a\n\n- `MAVEN_REPO`: \u81ea\u5b9a\u4e49 Maven \u4ed3\u5e93\u8def\u5f84\n- `M2_HOME`: Maven \u4e3b\u76ee\u5f55\uff08\u5c06\u4f7f\u7528 `$M2_HOME/repository`\uff09\n- `MCP_MAX_RESPONSE_SIZE`: \u6700\u5927\u54cd\u5e94\u5927\u5c0f\uff08\u5b57\u8282\uff09\uff0c\u9ed8\u8ba4 50000\n- `MCP_MAX_TEXT_LENGTH`: \u6700\u5927\u6587\u672c\u957f\u5ea6\uff0c\u9ed8\u8ba4 10000\n- `MCP_MAX_LINES`: \u6700\u5927\u884c\u6570\uff0c\u9ed8\u8ba4 500\n\n## \u5f00\u53d1\n\n### \u8fd0\u884c\u6d4b\u8bd5\n\n```bash\n# \u8fd0\u884c\u6240\u6709\u6d4b\u8bd5\npytest tests/\n\n# \u8fd0\u884c\u7279\u5b9a\u6d4b\u8bd5\npytest tests/test_jar_reader.py -v\n```\n\n### \u9879\u76ee\u7ed3\u6784\n\n```\neasy-jar-reader/\n\u251c\u2500\u2500 src/easy_jar_reader/\n\u2502 \u251c\u2500\u2500 __init__.py\n\u2502 \u251c\u2500\u2500 __main__.py # \u7a0b\u5e8f\u5165\u53e3\u70b9\n\u2502 \u251c\u2500\u2500 server.py # MCP \u670d\u52a1\u5668\u5b9e\u73b0\n\u2502 \u251c\u2500\u2500 config.py # \u914d\u7f6e\u7ba1\u7406\n\u2502 \u251c\u2500\u2500 decompiler.py # \u53cd\u7f16\u8bd1\u5668\u96c6\u6210\n\u2502 \u2514\u2500\u2500 response_manager.py # \u54cd\u5e94\u7ba1\u7406\u5668\n\u251c\u2500\u2500 decompilers/ # \u53cd\u7f16\u8bd1\u5668 JAR \u6587\u4ef6\n\u2502 \u2514\u2500\u2500 fernflower.jar # Fernflower \u53cd\u7f16\u8bd1\u5668\n\u251c\u2500\u2500 tests/ # \u6d4b\u8bd5\u6587\u4ef6\n\u251c\u2500\u2500 pyproject.toml # Python \u9879\u76ee\u914d\u7f6e\n\u251c\u2500\u2500 requirements.txt # Python \u4f9d\u8d56\n\u2514\u2500\u2500 README.md # \u672c\u6587\u6863\n```\n\n## \u8bb8\u53ef\u8bc1\n\nMIT License\n\n## \u8d21\u732e\n\n\u6b22\u8fce\u63d0\u4ea4 Issue \u548c Pull Request\uff01\n\n## \u81f4\u8c22\n\n\u672c\u9879\u76ee\u53c2\u8003\u4e86 [maven-decoder-mcp](https://github.com/salitaba/maven-decoder-mcp) \u7684\u90e8\u5206\u5b9e\u73b0\u3002\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "MCP Server for reading Java source code from Maven JAR files with decompilation support",
"version": "0.1.3",
"project_urls": {
"Changelog": "https://github.com/FangYuan33/easy-jar-reader/releases",
"Documentation": "https://github.com/FangYuan33/easy-jar-reader#readme",
"Homepage": "https://github.com/FangYuan33/easy-jar-reader",
"Issues": "https://github.com/FangYuan33/easy-jar-reader/issues",
"Repository": "https://github.com/FangYuan33/easy-jar-reader.git"
},
"split_keywords": [
"mcp",
" model-context-protocol",
" maven",
" jar",
" java",
" decompiler",
" source-code",
" fernflower",
" claude",
" ai-tools"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "8b5ed95db43b9d4c1bdeb1c518ef84c001cf9b10e20683c76b9d5f1b7ba0a9f0",
"md5": "c3c2e56f3cb6aa8b0f1b99a89c70794b",
"sha256": "e7e213b01f68cfa1e63b8df143b5060cb0a1f2d92467b5d1e7a79497fba31952"
},
"downloads": -1,
"filename": "easy_jar_reader-0.1.3-py3-none-any.whl",
"has_sig": false,
"md5_digest": "c3c2e56f3cb6aa8b0f1b99a89c70794b",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.10",
"size": 862184,
"upload_time": "2025-11-05T04:51:52",
"upload_time_iso_8601": "2025-11-05T04:51:52.529708Z",
"url": "https://files.pythonhosted.org/packages/8b/5e/d95db43b9d4c1bdeb1c518ef84c001cf9b10e20683c76b9d5f1b7ba0a9f0/easy_jar_reader-0.1.3-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "1c668861b26559a35b24cfb031f6ff596043a0f2d3db6b2df4ab028da964ed58",
"md5": "527bbf41ad93245687a3d4e0321e1aa6",
"sha256": "3bd7a67a7715d315543d9a6a69a4f38f8c9a64f812c30daf0507d2a7fcd3223f"
},
"downloads": -1,
"filename": "easy_jar_reader-0.1.3.tar.gz",
"has_sig": false,
"md5_digest": "527bbf41ad93245687a3d4e0321e1aa6",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.10",
"size": 868617,
"upload_time": "2025-11-05T04:51:53",
"upload_time_iso_8601": "2025-11-05T04:51:53.860146Z",
"url": "https://files.pythonhosted.org/packages/1c/66/8861b26559a35b24cfb031f6ff596043a0f2d3db6b2df4ab028da964ed58/easy_jar_reader-0.1.3.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-11-05 04:51:53",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "FangYuan33",
"github_project": "easy-jar-reader",
"github_not_found": true,
"lcname": "easy-jar-reader"
}