jdeps 通过 --dot-output 生成 dot 文本文件,再用 graphviz 的 dot 命令渲染为 png/svg 图表;需模块化 jar 和正确配置 --module-path,支持模块级依赖可视化。

jdeps 是 JDK 自带的静态依赖分析工具,从 Java 9 开始支持模块化(JPMS)分析。它本身不直接生成 Dot 图文件,但可以通过输出文本依赖信息,再借助 Graphviz 工具链(如 dot 命令)转换为可视化图表(如 PNG、SVG 或 PDF)。以下是完整、实用的操作流程:
1. 使用 jdeps 提取模块/类的依赖关系(文本格式)
先用 jdeps 生成结构化的依赖报告,推荐使用 --dot-output 选项——它会自动生成符合 Graphviz dot 语法的 .dot 文件(注意:不是图片,是纯文本图描述)。
- 分析整个模块 JAR(例如
myapp.jar),并输出到dot-out/目录:
✅ 这会为每个被分析的模块(含自动模块)生成一个 <module-name>.dot</module-name> 文件,比如 java.base.dot、myapp.dot。
⚠️ 注意:--dot-output 要求目标是模块化 JAR(含 module-info.class)或明确指定 --module-path;对传统 classpath 的普通 JAR,需加 --class-path 并配合 --multi-release BASE 等参数,且生成的是包级(package-level)而非模块级依赖图。
2. 理解生成的 .dot 文件内容
打开生成的 myapp.dot,你会看到类似:
node [shape=box];
"myapp" -> "java.base";
"myapp" -> "java.logging";
}
这是标准 Graphviz DOT 语法,描述了模块之间的 requires 关系。节点是模块名,边表示“依赖于”。
? 提示:若想包含更细粒度(如包间依赖),可加 --package <pkg></pkg> 或 --filter:none,但模块图默认只展示模块层级。
3. 用 Graphviz 渲染成图像
确保已安装 Graphviz(命令行工具 dot 可用):
- 生成 PNG:
- 生成 SVG(推荐,矢量清晰):
✅ 你将得到一张直观的模块依赖图,节点为模块,箭头指向被依赖方(即 myapp → java.base 表示 myapp requires java.base)。
4. 常见问题与优化建议
-
报错 “No module found”? 检查
myapp.jar是否含module-info.class;若为自动模块,需确保 JAR 名称不含非法字符,并在--module-path中显式指定。 -
图太复杂看不清? 加
--limit-deps java.base,java.logging限制依赖范围;或用--ignore-missing-deps跳过未找到的模块。 -
想合并多个模块到一张图?
jdeps不支持直接合并,但可手动拼接多个 .dot 文件中的 subgraph,或改用--multi-release+--verbose:module配合脚本解析。 - 需要交互式查看? 将 .dot 文件用 VS Code 安装 Graphviz Preview 插件即可实时渲染。
不复杂但容易忽略:jdeps 的 --dot-output 是最接近“一键出图”的方式,关键在输入必须是模块化上下文,且后续依赖 Graphviz 渲染。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











