前置需求
- 你必须提前获知本 skill 所在的路径,下方的 /path/to/this/skill 则代表本 skill 的路径
- 你必须知道当前项目是 Gradle 还是 Maven 项目:根目录存在
gradlew/gradlew.bat时按 Gradle 项目处理,存在pom.xml时按 Maven 项目处理
使用
当用户需要查看某个依赖 jar 包的源码时,使用以下工具读取:
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 行时,只展示源码骨架) |
使用示例
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
如果只知道类名,也可以直接这样传:
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,则直接读取源码;若命中多个,会提示改用更完整的类名。
如果要读取内部类,可以这样传:
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
如果需要显式指定本地仓库目录,可以这样传:
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