jdeps 是 JDK 自带的静态依赖分析工具,用于解析字节码识别 import、调用、继承等依赖关系,可检测 JDK 内部 API 使用(如 sun.misc.Unsafe)、模块依赖、非法访问及迁移兼容性问题。

jdeps 是 JDK 自带的静态依赖分析工具,用于分析 Java 类、JAR 包或模块之间的依赖关系。它不运行代码,而是通过解析字节码提取 import、方法调用、继承、反射等信息,帮助你识别:哪些 JDK 内部 API 被使用了(如 sun.misc.Unsafe),哪些模块/包被依赖,是否存在循环依赖或非法访问,以及模块化迁移时的兼容性问题。
基础用法:分析单个 JAR 或类文件
最常用场景是检查一个打包好的 JAR 文件用了哪些 JDK 类和第三方依赖:
- 分析 JAR:
jdeps myapp.jar—— 显示该 JAR 中每个类所依赖的包(默认只显示 JDK 包) - 显示全部依赖(含第三方):
jdeps -verbose:class myapp.jar - 只看顶层依赖(去重聚合):
jdeps -summary myapp.jar - 输出为 CSV 格式便于处理:
jdeps -summary -format csv myapp.jar
识别 JDK 内部 API 使用(关键!)
从 JDK 9 开始,很多 sun.*、com.sun.* 等内部 API 被标记为“不建议使用”,jdeps 可快速定位它们:
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
-
jdeps --jdk-internals myapp.jar—— 列出所有对 JDK 内部 API 的引用,并提示替代方案(如用java.util.Base64替代sun.misc.BASE64Encoder) - 搭配
-R(递归)可深入分析依赖的 JAR:jdeps -R --jdk-internals myapp.jar
分析模块化项目(Java 9+)
如果你的项目已定义 module-info.java,可用 jdeps 验证模块声明是否完整、是否有隐式依赖:
立即学习“Java免费学习笔记(深入)”;
- 检查模块依赖图:
jdeps --module-path mods --module my.module.name - 生成模块依赖图(DOT 格式):
jdeps -dotoutput dot/ --module-path mods --module my.module.name,再用 Graphviz 渲染可视化图 - 检查是否所有 require 都被满足:
jdeps --validate --module-path mods myapp.jar
集成到构建流程(Maven / Gradle)
避免手动执行,推荐在 CI 或本地构建中自动检查:
- Maven:使用 animal-sniffer 或 jdeps-maven-plugin 插件,在编译后运行 jdeps 并失败非法 JDK 内部调用
- Gradle:可通过
Exectask 调用 jdeps,例如在build.gradle中添加任务检查build/libs/*.jar - 小技巧:把
jdeps --jdk-internals当作“编译后检查”步骤,和 Checkstyle、SpotBugs 同级使用

















