某个类依赖哪些类

如果你的目标是:

给定一个 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 插件级别的效果

相关推荐
Rhys..5 个月前
POM思想的理解与示例
前端·javascript·python·html·pom
岁岁岁平安1 年前
Maven学习(依赖版本维护、依赖传递、解决Maven依赖冲突的3种方式)
xml·java·学习·maven·pom·依赖冲突问题·依赖传递
北漂编程小王子1 年前
maven 中<packaging>pom</packaging>配置使用
maven·pom·packaging
李晋江1 年前
Java 直接获取 pom.xml 配置的属性值
java·maven·springboot·pom
牧魂.1 年前
pom web 自动化测试框架分享
功能测试·测试工具·测试框架·pom
will_net2 年前
web自动化(七)POM设计模式
selenium·自动化·pom·drissionpage
寒山李白2 年前
关于Java依赖版本升级的相关问题解决(持续更新)
java·pom·java依赖
fatfishccc2 年前
在IDEA空项目中创建SpringBoot模块没有src等文件夹,只有pom.xml
xml·spring boot·intellij-idea·pom
tekin2 年前
Springboot如何判断pom.xml中是否加载了某个jar依赖
xml·spring boot·maven·jar·pom