vitaliy-hnatyk/java-code-map-yaml
GitHub: vitaliy-hnatyk/java-code-map-yaml
一款 Java 静态分析命令行工具,通过解析源码生成包含类、方法及跨类调用关系的 YAML 结构化映射,帮助开发者梳理遗留项目架构。
Stars: 1 | Forks: 0
# Java 代码 Map YAML
[](https://github.com/your-org/java-code-map-yaml/actions/workflows/maven.yml)
[](LICENSE)
## GitHub 描述
**Java 静态分析 CLI 工具,用于生成包含类、字段、方法、可见性修饰符和跨类方法调用的 YAML 映射。**
## GitHub 主题 / 标签
```
java
static-analysis
javaparser
java-parser
symbol-solver
yaml
code-map
call-graph
architecture-documentation
reverse-engineering
maven
cli-tool
```
## 功能简介
`java-code-map-yaml` 会扫描 Java 项目并生成一个 `code-map.yml` 文件,其中包含:
- 类、接口、枚举和注解
- 包名、文件路径和源码行号
- 类可见性:`public`、`private`、`protected`、`package-private`
- 带有类型、修饰符和注解的字段
- 构造函数和方法
- 方法可见性和修饰符
- 方法参数和返回类型
- 每个方法/构造函数内部的方法调用
- 当 JavaParser Symbol Solver 能够解析时,提供已解析的目标类/方法
- 反向索引:哪些外部项目类调用了指定的方法
它适用于为老旧 Java 项目、WildFly/JBoss 应用、服务层、SOAP/REST 模块、GWT 项目以及大型遗留代码库编写文档。
## 局限性
此工具执行静态源代码分析。它可以检测到如下的直接 Java 调用:
```
userValidator.validate(dto);
repository.save(user);
this.prepareData();
```
可能无法完全检测到动态或框架驱动的调用,例如:
- 反射
- Spring/CDI 代理调用
- 纯 XML 装配
- JSP/JSF/GWT UiBinder 事件
- 基于 WSDL/运行时元数据的 SOAP 分发
- SQL 存储过程调用
- 隐藏在未包含于扫描源根目录中的生成源码内的调用
## 环境要求
- Java 8+
- Maven 3.8+
## 构建
```
mvn clean package
```
生成的可运行 jar 包将位于:
```
target/java-code-map-yaml-1.0.0.jar
```
## 使用说明
分析一个 Java 项目:
```
java -jar target/java-code-map-yaml-1.0.0.jar \
--project /path/to/your/java-project \
--output /path/to/your/java-project/code-map.yml
```
简写的位置参数语法也同样适用:
```
java -jar target/java-code-map-yaml-1.0.0.jar /path/to/your/java-project /path/to/code-map.yml
```
仅分析选定的源根目录:
```
java -jar target/java-code-map-yaml-1.0.0.jar \
--project /path/to/project \
--source-root module-a/src/main/java \
--source-root module-b/src/main/java \
--output code-map.yml
```
排除测试源码:
```
java -jar target/java-code-map-yaml-1.0.0.jar \
--project /path/to/project \
--exclude-tests
```
显示帮助:
```
java -jar target/java-code-map-yaml-1.0.0.jar --help
```
## 输出示例
```
generator: java-code-map-yaml
generated_at: '2026-07-09T22:00:00+02:00'
project_root: /projects/my-java-app
source_roots:
- /projects/my-java-app/src/main/java
java_files_count: 2
classes_count: 2
classes:
- name: com.example.app.service.UserService
simple_name: UserService
package: com.example.app.service
kind: class
file: src/main/java/com/example/app/service/UserService.java
line: 5
visibility: public
modifiers:
- public
annotations: []
extends: []
implements: []
fields:
- names:
- validator
type: UserValidator
visibility: private
modifiers:
- private
- final
annotations: []
line: 7
methods:
- name: createUser
signature: createUser(String)
return_type: String
visibility: public
modifiers:
- public
annotations: []
line: 14
parameters:
- name: email
type: String
varargs: false
annotations: []
calls:
- name: validate
raw: validator.validate(email)
scope: validator
line: 15
resolved: true
target_class: com.example.app.validation.UserValidator
target_signature: com.example.app.validation.UserValidator.validate(java.lang.String)
target_method: validate
project_class: true
external_class_call: true
called_by_other_classes:
- target_method: com.example.app.validation.UserValidator.validate(java.lang.String)
called_by:
- caller_class: com.example.app.service.UserService
caller_method: createUser(String)
line: 15
```
## 输出 Schema
参见 [`docs/OUTPUT_SCHEMA.md`](docs/OUTPUT_SCHEMA.md)。
## 遗留项目的推荐工作流
1. 运行该工具并生成 `code-map.yml`。
2. 将该 YAML 文件提交到一个文档分支。
3. 在 YAML 中搜索 `external_class_call: true` 以查找跨类依赖。
4. 在 `called_by_other_classes` 中搜索,以在进行重构之前找到方法的调用方。
5. 在大规模重构后重新生成 YAML,并在 Git 中比较变更。
## 依赖项
- [JavaParser Symbol Solver](https://github.com/javaparser/javaparser)
- [SnakeYAML](https://bitbucket.org/snakeyaml/snakeyaml)
- [Maven Shade Plugin](https://maven.apache.org/plugins/maven-shade-plugin/)
## 许可证
MIT。参见 [`LICENSE`](LICENSE)。
标签:JS文件枚举, 云安全监控, 代码地图, 域名枚举, 安全专业人员, 文档结构分析, 架构文档, 调用图, 静态分析