# Jar Source Reader

> 如果需要读取当前 Maven 或者 Gradle 项目，引入的 jar 包的具体源代码，则调用此 skill

- Skill: `bling-yshs/jar-source-reader` (Agent Skill, multi-file: 10 files)
- Install (CLI): `npx skillmds@latest add bling-yshs/jar-source-reader`
- Raw SKILL.md: https://api.skillmd.com/api/skills/bling-yshs/jar-source-reader/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: bling-yshs (https://skillmd.com/u/bling-yshs)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/bling-yshs/jar-source-reader

---


## 前置需求

- 你必须提前获知本 skill 所在的路径，下方的 /path/to/this/skill 则代表本 skill 的路径
- 你必须知道当前项目是 Gradle 还是 Maven 项目：根目录存在 `gradlew` / `gradlew.bat` 时按 Gradle 项目处理，存在 `pom.xml` 时按 Maven 项目处理

## 使用

当用户需要查看某个依赖 jar 包的源码时，使用以下工具读取：

``` bash
java '-Dfile.encoding=UTF-8' -jar /path/to/this/skill/tool/jar-source-reader.jar
```

### 参数说明

| 参数 | 必填条件 | 说明                                                                                  |
|------|----------|-------------------------------------------------------------------------------------|
| `--mode` | 否 | 类搜索模式，可选 `exact` 或 `fuzzy`，默认 `fuzzy`                                           |
| `--group-id` | 仅 `exact` 模式 | Maven group ID，例如 `cn.hutool`                          |
| `--artifact-id` | 仅 `exact` 模式 | Maven artifact ID，例如 `hutool-all`                          |
| `--version` | 仅 `exact` 模式 | 版本号，例如 `5.8.36`                                        |
| `--class-name` | 是 | 类名或完全限定类名，例如 `IdUtil` 或 `cn.hutool.core.util.IdUtil`；读取内部类时可写成 `IdUtil$Inner` 或 `cn.hutool.core.util.IdUtil$Inner`。如果 sources jar 里有多个同名类，需要改传完整类名 |
| `--method-name` | 否 | 方法名，例如 `fastSimpleUUID`；不传入则展示整个类的源码，传入后只输出对应方法的源码，若存在方法重载会输出所有同名方法                 |
| `--maven-repo` | 否 | 指定 Maven 仓库根目录，例如 `C:/Users/yshs/.m2/repository`；不传则使用默认路径                         |
| `--gradle-repo` | 否 | 指定 Gradle 仓库根目录，例如 `C:/Users/yshs/.gradle/caches/modules-2/files-2.1`；不传则使用默认路径      |
| `--ignore-length-limit` | 否 | 忽略源码行数限制（默认超过 500 行时，只展示源码骨架）                                                   |

### 使用示例

```bash
java '-Dfile.encoding=UTF-8' -jar /path/to/this/skill/tool/jar-source-reader.jar --mode=exact --group-id=cn.hutool --artifact-id=hutool-all --version=5.8.36 --class-name=cn.hutool.core.util.IdUtil --method-name=fastSimpleUUID
```

如果只知道类名，也可以直接这样传：

```bash
java '-Dfile.encoding=UTF-8' -jar /path/to/this/skill/tool/jar-source-reader.jar --mode=fuzzy --class-name=IdUtil
```

 `fuzzy` 模式会先在当前 Gradle / Maven 项目的依赖 jar 中定位目标 class，再反查对应的 sources jar。若只命中一个 sources jar，则直接读取源码；若命中多个，会提示改用更完整的类名。

如果要读取内部类，可以这样传：

```bash
java '-Dfile.encoding=UTF-8' -jar /path/to/this/skill/tool/jar-source-reader.jar --mode=exact --group-id=cn.hutool --artifact-id=hutool-all --version=5.8.36 --class-name=cn.hutool.core.util.IdUtil$Inner
```

如果需要显式指定本地仓库目录，可以这样传：

```bash
java '-Dfile.encoding=UTF-8' -jar /path/to/this/skill/tool/jar-source-reader.jar --group-id=cn.hutool --artifact-id=hutool-all --version=5.8.36 --class-name=cn.hutool.core.util.IdUtil --maven-repo=C:/Users/yshs/.m2/repository --gradle-repo=C:/Users/yshs/.gradle/caches/modules-2/files-2.1
```

