如果你的目标是:
给定一个 Java 类 → 自动分析它使用了哪些依赖(Jar / Maven 依赖)
GitHub 上确实有一些专门做 类依赖分析(Class Dependency Analysis) 的项目。下面是几个比较实用的。
1️⃣ ClassGraph(最强、最常用)
ClassGraph
GitHub
https://github.com/classgraph/classgraph
功能
-
扫描整个 classpath
-
获取 类依赖关系
-
找出某个类引用了哪些类
-
可以定位到 jar
示例
ScanResult scanResult = new ClassGraph()
.enableClassInfo()
.enableDependencyInfo()
.scan();
ClassInfo classInfo = scanResult.getClassInfo("com.example.MyClass");
for (ClassInfo dep : classInfo.getClassDependencies()) {
System.out.println(dep.getName());
}
输出:
org.springframework.context.ApplicationContext
org.slf4j.Logger
然后就能对应到:
spring-context
slf4j-api
优点:
-
扫描速度很快
-
支持 jar / module
-
很多框架在用
2️⃣ DepClean(分析代码实际使用的依赖)
DepClean
GitHub
https://github.com/castor-software/depclean
功能
-
找出 代码真正使用的依赖
-
找出 未使用依赖
-
找出 未声明依赖
运行:
mvn depclean:depclean
输出:
Class: com.example.service.UserService
Uses:
org.springframework.context.ApplicationContext
org.slf4j.Logger
适合:
-
Maven 项目依赖清理
-
SpringBoot 项目分析
3️⃣ jQAssistant(架构级依赖分析)
jQAssistant
GitHub
https://github.com/jqassistant/jqassistant
功能
-
扫描 Java 字节码
-
构建 类依赖图
-
可以查询:
某个类依赖哪些类
某个包依赖哪些包
某个模块依赖哪些 jar
使用 Cypher 查询:
MATCH (c:Class {name:'com.example.MyClass'})-[:DEPENDS_ON]->(d)
RETURN d
适合:
-
大型系统架构分析
-
微服务依赖分析
4️⃣ ArchUnit(测试级依赖分析)
ArchUnit
GitHub
https://github.com/TNG/ArchUnit
功能
-
分析 类依赖关系
-
可以写规则检查架构
示例:
JavaClasses classes = new ClassFileImporter()
.importPackages("com.example");
JavaClass clazz = classes.get("com.example.MyClass");
clazz.getDirectDependenciesFromSelf()
.forEach(dep -> System.out.println(dep.getTargetClass()));
输出:
org.springframework.context.ApplicationContext
org.slf4j.Logger
5️⃣ DependencyFinder(老牌工具)
DependencyFinder
GitHub
https://github.com/clarkware/dependency-finder
功能:
-
分析 class 文件
-
输出类依赖关系
-
可生成依赖图
⭐ 推荐程度
如果你的需求是:
输入一个类 → 输出它用到的依赖
推荐顺序:
1️⃣ ClassGraph (最灵活)
2️⃣ DepClean (适合 Maven 项目)
3️⃣ ArchUnit (适合写规则测试)
4️⃣ jQAssistant(适合大型系统分析)
💡 很多人不知道的一个技巧
其实可以做一个工具实现:
类
↓
引用的类
↓
所在 jar
↓
Maven 坐标
自动生成:
MyService
├─ spring-context
├─ spring-beans
└─ slf4j-api
如果你愿意,我可以帮你找 一个 GitHub 项目可以直接:
输入类名
↓
自动输出 Maven 依赖
甚至可以做成 IDEA 插件级别的效果。