我的编程空间,编程开发者的网络收藏夹
学习永远不晚

【Java可执行命令】(十二)依赖分析工具jdeps:通过静态分析字节码并提取相关信息来实现依赖分析 ~

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

【Java可执行命令】(十二)依赖分析工具jdeps:通过静态分析字节码并提取相关信息来实现依赖分析 ~

在这里插入图片描述

1️⃣ 概念

Java中的jdeps命令是一个用于分析类或JAR文件的工具,它能够帮助开发者识别出类之间的依赖关系。

jdeps命令最早于Java 8版本中引入,旨在帮助开发者识别出Java类之间的依赖关系。其设计目的是为了帮助开发者在进行代码重构、迁移、与外部库集成等操作时,更好地了解库之间的依赖关系。

jdeps命令通过分析Java字节码中的类、接口和包之间的引用关系,生成依赖关系报告。这些报告可以用来分析代码结构、识别潜在的问题,并帮助开发者进行代码重构和优化。

jdeps命令具有以下特征:

  • 支持分析单个类、多个类或整个JAR文件的依赖关系;
  • 可生成多种类型的报告,如文本报告、XML报告等;
  • 可以与其他Java工具集成,如MavenGradle等。

命令的实现原理是通过解析字节码中的类、接口和包的引用关系,构建依赖关系图。它使用了Java的反射机制和类加载器来获取类之间的关联信息,并生成相应的依赖关系报告。

2️⃣ 优势和缺点

优点:

  • 帮助开发者更好地理解项目中的依赖关系,提高代码的可维护性和可复用性;
  • 可以帮助开发者识别出潜在的问题,如循环依赖、过度依赖等;
  • 提供了详细的报告,方便开发者进行代码优化和重构。

缺点:

  • jdeps命令在分析大型项目时可能会消耗较多的时间和计算资源;
  • 对于复杂的项目结构,可能需要额外的手动配置参数来分析特定的依赖关系。

3️⃣ 使用

3.1 语法格式

jdeps命令的基础语法如下:

jdeps [options] ...

其中,[options]为可选参数,为要分析的类文件或JAR文件。
jdeps支持的各种可选参数汇总如下:

参数说明
-dotoutput DOT 文件输出的目标目录
-s-summary仅输出被依赖对象概要
-v-verbose输出所有类级别被依赖对象。等同于 -verbose:class -filter:none
-verbose:package默认情况下输出程序包级别被依赖对象,不包括同一程序包中的被依赖对象
-verbose:class默认情况下输出类级别被依赖对象,不包括同一程序包中的被依赖对象
-cp -classpath 指定查找类文件的位置
-p -package 查找与给定程序包名称匹配的被依赖对象(可多次指定)
-e -regex 查找与指定模式匹配的被依赖对象 (-p 和 -e 互相排斥)
-f -filter 筛选与指定模式匹配的被依赖对象。如果多次指定, 则将使用最后一个被依赖对象
-filter:package筛选位于同一程序包内的被依赖对象 (默认)
-filter:archive筛选位于同一档案内的被依赖对象
-filter:none不使用 -filter:package-filter:archive 筛选. 通过 -filter 选项指定的筛选仍旧适用
-include 将分析限制为与模式匹配的类 此选项筛选要分析的类的列表。 它可以与向被依赖对象应用模式的 -p 和 -e 结合使用
-P-profile显示配置文件或包含程序包的文件
-apionly通过公共类 (包括字段类型, 方法参数类型, 返回类型, 受控异常错误类型等) 的公共和受保护成员的签名限制对 API (即被依赖对象)进行分析
-R-recursive递归遍历所有被依赖对象
-R 选项表示 -filter:none。如果指定了 -p,-e, -f 选项, 则只分析匹配的被依赖对象
-jdkinternals在 JDK 内部 API 上查找类级别的被依赖对象。默认情况下, 它分析 -classpath 上的所有类和输入文件, 除非指定了 -include 选项。此选项不能与 -p, -e-s 选项一起使用
-version版本信息

上边信息列出了jdeps命令支持的所有可选参数,大家可以根据自己的需求参照表格选择所需操作参数。而下面主要介绍几个常用的可选参数:

  • -dotoutput :DOT 文件输出的目标目录;
  • -s-summary:仅输出被依赖对象概要;
  • -v-verbose:输出所有类级别被依赖对象;
  • -cp -classpath :指定查找类文件的位置。

对于未介绍到的可选参数,大家可以使用 “jdeps -help” 获取对应参数的用法及作用描述。

3.2 可选参数:jdeps -dotoutput < dir>

jdeps -dotoutput

用于分析 Java 应用程序或库中的依赖关系,并生成一组以 DOT 格式表示的依赖图。
-dotoutput 选项告诉 jdeps 将生成的依赖关系图输出为一组以 DOT(Graphviz DOT 格式)格式表示的文件,并保存在指定的目录 中。

每个生成的 DOT 文件将代表一个类,并描述它与其他类之间的依赖关系。这些 DOT 文件可以通过使用 Graphviz 工具转换为图像,从而可视化依赖关系图。

使用案例如下:

jdeps -dotoutput D: MyClass.class

该指令将 D: 指定为生成 DOT 文件的目标目录路径。执行命令后,jdeps 将分析指定目录中的 Java 类文件MyClass.class,并生成以 DOT 格式表示的依赖关系图。生成的 .dot 文件如下所示。

在这里插入图片描述


在这里插入图片描述

文件生成之后可以使用 Graphviz 工具将 .dot 文件转换为图像格式(如 PNG、SVG)来可视化依赖关系图。例如,使用以下命令通过 Graphviz 将 DOT 文件转换为 PNG 图像:

dot -Tpng d:\MyClass.class.dot -o d:\output.png

d:\MyClass.class.dot 是实际的 .dot 文件路径,而 d:\output.png 指定了生成的图像文件名和路径。

注意在使用 dot 时,确保已正确安装和配置了相关的软件: Graphviz。

3.3 可选参数:jdeps -s

jdeps -s 用于分析 Java 应用程序或库的依赖关系并输出简化的摘要信息。

在终端或命令提示符中输入以下命令:

jdeps -s MyClass.class

使用 -s 选项后,jdeps 将输出以下摘要信息:

  • 依赖该 JAR 文件或类文件的其他 JAR 文件或类文件名称。
  • 该 JAR 文件或类文件所依赖的其他 JAR 文件或类文件名称。

这些摘要信息可以帮助快速了解项目中的依赖关系,包括识别哪些文件可能会需要进行更改或更新。

3.4 可选参数:jdeps -v

jdeps -v 用于分析 Java 应用程序或库的依赖关系并输出详细的依赖信息。

在终端或命令提示符中输入以下命令:

jdeps -v MyClass.class

使用 -v 选项后,jdeps 将输出以下详细信息:

  • 依赖该 JAR 文件或类文件的其他 JAR 文件或类文件的路径。
  • 该 JAR 文件或类文件所依赖的其他 JAR 文件或类文件的路径。
  • 使用的模块名称(如果使用了模块化开发)。
  • 是否存在潜在的循环依赖。
  • 可能需要在类路径上可用的符号。

执行结果如下所示:

在这里\插入图片描述

在这里插入图片描述

3.5 可选参数:jdeps -cp < path>

jdeps -cp用于指定 jdeps 工具执行时要使用的类路径。

在终端或命令提示符中输入以下命令:

jdeps -cp  

替换为要设置的类路径,并将 替换为目标 JAR 文件或类文件的路径。

Java 类往往相互依赖于其他类和库,为了正确分析这些依赖关系,需要提供适当的类路径。使用 -cp 选项,你可以指定包含所需类和库的 classpath(类路径),以确保 jdeps 可以正确地分析和检测到这些依赖关系。

通过指定正确的类路径,jdeps 将能够找到项目所需的所有类和库,并生成准确的依赖分析结果。

3.6 注意事项:

在使用jdeps命令时,需要注意以下事项:

  1. jdeps命令需要在Java开发环境中使用,并确保JAVA_HOME环境变量已正确设置;
  2. 对于复杂的项目结构,可能需要额外的参数设置来分析特定的依赖关系;
  3. jdeps命令的分析结果应结合实际情况进行判断,不仅依赖关系报告,还需要开发者自己的判断和分析。

4️⃣ 应用场景

jdeps命令可以应用于以下场景:

  • 识别项目中的依赖关系,帮助开发者进行代码优化和重构;
  • 分析第三方库或外部依赖的依赖关系,以解决版本冲突和兼容性问题;
  • 辅助进行代码迁移、模块化或重构操作。

🌾 总结

jdeps命令是Java开发中一种有用的工具,它能够帮助开发者识别类之间的依赖关系。通过分析依赖关系,开发者可以更好地理解项目结构、优化代码,解决潜在的问题。然而,使用jdeps命令需要结合具体的项目情况和开发需求,正确理解和应用分析结果。


来源地址:https://blog.csdn.net/LVSONGTAO1225/article/details/131623320

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

【Java可执行命令】(十二)依赖分析工具jdeps:通过静态分析字节码并提取相关信息来实现依赖分析 ~

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

【Java可执行命令】(十二)依赖分析工具jdeps:通过静态分析字节码并提取相关信息来实现依赖分析 ~

Java可执行命令之jdeps 1️⃣ 概念2️⃣ 优势和缺点3️⃣ 使用3.1 语法格式3.2 可选参数:jdeps -dotoutput 3.3 可选参数:jdeps -s3.4 可选参数:jdeps -v3.5 可选参数:jd
2023-08-16

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录