java中JDeps命令使用

 更新时间:2024年09月20日 11:27:02   作者:pumpkin84514  
jdeps是一个Java类依赖分析工具,用于分析Java应用程序的依赖情况,包括类、包、模块以及JDK内部API的使用,本文就来详细的介绍一下,感兴趣的可以了解一下

jdeps 是一个 Java 类依赖分析工具,允许开发者深入分析 Java 应用程序的依赖情况,包括类、包、模块和 JDK 内部 API 的使用。下面详细介绍 jdeps 的常用命令和输出解释。

1. 基本依赖分析

jdeps path/to/yourapp.jar

这个命令会分析指定 JAR 文件中的依赖关系,并输出每个类的依赖情况。

输出示例:

yourapp.jar -> java.base
   com.example.MyClass -> java.util.List
   com.example.MyClass -> java.io.File

这表明 yourapp.jar 依赖于 java.base 模块,且 MyClass 依赖于 java.util.List 和 java.io.File

2. 包依赖分析(-s 或 --summary)

jdeps -s path/to/yourapp.jar

该选项会简化输出,仅显示包与包之间的依赖,而不列出每个类的详细依赖。

输出示例:

yourapp.jar -> java.base
   com.example -> java.util
   com.example -> java.io

这表示 com.example 包依赖于 java.util 和 java.io 包。

3. 模块依赖分析

在 Java 9 及以上版本,Java 引入了模块系统。通过 jdeps 可以分析模块之间的依赖。

jdeps --module-path path/to/modules --add-modules your.module.name path/to/yourapp.jar

输出示例:

yourapp.jar -> java.base
   my.module -> java.logging
   my.module -> java.sql

这表示 my.module 依赖于 java.logging 和 java.sql 模块。

4. 查找 JDK 内部 API 的使用情况(-jdkinternals)

如果你想检查项目中是否使用了不安全的 JDK 内部 API,可以使用 -jdkinternals 选项。

jdeps -jdkinternals path/to/yourapp.jar

输出示例:

myapp.jar -> java.base
   com.example.MyClass -> sun.misc.Unsafe
Warning: com.example.MyClass uses JDK internal API (sun.misc.Unsafe)

这意味着 MyClass 使用了 sun.misc.Unsafe,这是一个 JDK 内部 API,应该尽量避免使用。

5. 显示类依赖(-v 或 --verbose)

使用 -v 选项可以显示更详细的依赖信息。它有三个详细级别:

  • -verbose:class:显示类的依赖。
  • -verbose:package:显示包的依赖。
  • -verbose:module:显示模块的依赖。
jdeps -v:class path/to/yourapp.jar

输出示例:

yourapp.jar -> java.base
   com.example.MyClass -> java.util.ArrayList
   com.example.MyClass -> java.io.File
   com.example.MyClass -> java.lang.String

这列出了每个类的具体依赖关系。

6. 限制分析到指定包或类(-p 或 --package)

你可以使用 -p 选项仅分析指定包的依赖。

jdeps -p com.example path/to/yourapp.jar

输出说明:

  • 只显示 com.example 包的依赖关系。

7. 生成依赖图文件(-dotoutput)

可以使用 -dotoutput 选项生成 .dot 文件,使用这些文件可以通过图形工具(如 Graphviz)生成依赖关系图。

jdeps -dotoutput path/to/output/ path/to/yourapp.jar

输出说明:

  • 在指定的输出目录下生成 .dot 文件,用图形工具可以将依赖可视化。

JDeprScan 简介

jdeprscan 是另一个用于扫描已弃用 API 的工具,它可以帮助开发者检查代码是否依赖于即将在未来 JDK 版本中移除的 API。

常见用法

扫描指定 JDK 版本的弃用 API(–release)

--release 选项允许你扫描是否依赖于指定 JDK 版本中已弃用或将要删除的 API。

jdeprscan --release 17 path/to/jars-directory

这将扫描目录下的所有 JAR 文件,查找 JDK 17 中的已弃用或删除的 API。

输出示例:

warning: com.example.MyClass uses deprecated method java.util.Date.getYear()

表示 MyClass 使用了已在 JDK 17 中弃用的 getYear() 方法。

显示所有可扫描版本的 API

使用 jdeprscan --list 可以查看可以指定的 JDK 版本。

jdeprscan --list

输出示例:

Supported releases: 8, 9, 10, 11, 12, 13, 14, 15, 16, 17

扫描指定类文件或 JAR 文件的弃用 API

如果你想扫描特定的类或 JAR 文件:

jdeprscan path/to/yourapp.jar

输出示例:

warning: com.example.MyClass uses deprecated method java.util.Date.getYear()

JDeps 和 JDeprScan 常见问题解答

问题 1:运行 jdeps 时没有输出,意味着什么?

如果运行 jdeps 命令后没有任何输出,可能有以下几种情况:

  • 无依赖:所分析的类或 JAR 文件中没有外部依赖。
  • 类文件格式不兼容:可能分析的 .jar 或 .class 文件不兼容(例如,JDK 版本不一致)。

问题 2:为什么 jdeprscan --release 17 没有输出?

如果运行 jdeprscan --release 17 path/to/jar 没有输出,说明:

  • 没有使用弃用的 API:项目中没有使用 JDK 17 已弃用的 API。
  • 路径不正确:确保你提供了正确的路径,并且该路径下有需要扫描的 JAR 文件或类文件。

总结:JDeps 和 JDeprScan 的全面使用

  • jdeps 是分析 Java 类和模块依赖的工具,常用来迁移和检查内部 API 的使用。

    • 常用选项包括 -v(显示详细依赖)、-s(显示包依赖)、-jdkinternals(检查内部 API)。
  • jdeprscan 用于扫描代码中使用的弃用 API,常用 --release 来指定扫描的目标 JDK 版本。

    • jdeprscan --release 17 可以检查代码是否使用了在 JDK 17 中被弃用的 API。

掌握这些工具有助于你有效迁移代码到较新的 JDK 版本,并避免使用将来可能被移除的 API。

到此这篇关于java中JDeps命令使用的文章就介绍到这了,更多相关JDeps 使用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • java连接hdfs ha和调用mapreduce jar示例

    java连接hdfs ha和调用mapreduce jar示例

    这篇文章主要介绍了Java API连接HDFS HA和调用MapReduce jar包,需要的朋友可以参考下
    2014-03-03
  • spring-boot-maven-plugin 插件的作用详解

    spring-boot-maven-plugin 插件的作用详解

    添加了spring-boot-maven-plugin插件后,当运行maven打包的命令,项目会被打包成一个可以直接运行的jar包,使用"java -jar"可以直接运行。这篇文章主要给大家介绍spring-boot-maven-plugin 插件的作用,感兴趣的朋友一起看看吧
    2018-10-10
  • 在Java程序中使用数据库的新方法

    在Java程序中使用数据库的新方法

    这篇文章主要介绍了在Java程序中使用数据库的新方法,讲述了Java8以来数据库API的一些新特性,需要的朋友可以参考下
    2015-07-07
  • 浅析java中密文的创建和校验

    浅析java中密文的创建和校验

    这篇文章主要为大家详细介绍了java中密文的创建和校验的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-04-04
  • java桌球小游戏 小球任意角度碰撞

    java桌球小游戏 小球任意角度碰撞

    这篇文章主要为大家详细介绍了java桌球小游戏,小球任意角度碰撞,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-07-07
  • Java实现HTTP请求的4种方式总结

    Java实现HTTP请求的4种方式总结

    这篇文章主要给大家介绍了关于Java实现HTTP请求的4种方式,在java开发中,经常遇到需要调用第三方提供的接口服务的需求,文中给出了详细的代码示例,需要的朋友可以参考下
    2023-08-08
  • Java如何使用jar命令打包

    Java如何使用jar命令打包

    把多个文件打包成一个压缩包——这个压缩包和WinZip的压缩格式是一样的,区别在于jar压缩的文件默认多一个META-INF的文件夹,该文件夹里包含一个MANIFEST.MF的文件,本文给大家介绍Java如何使用jar命令打包,感兴趣的朋友跟随小编一起看看吧
    2023-10-10
  • IDEA自动生成类图和时序图的操作指南

    IDEA自动生成类图和时序图的操作指南

    idea 的强大之处在于此,它包含了很多小插件,我们不需要再次下载相关插件,只需要在idea中小小的设置一下就可以了,本文我介绍了IDEA自动生成类图和时序图的操作指南,我用的是idea2020版本,需要的朋友可以参考下
    2024-05-05
  • JDBC获取数据库连接的5种方式实例

    JDBC获取数据库连接的5种方式实例

    JDBC是一种用于执行SQL语句的JavaAPI,为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成,提供了诸如查询和更新数据库中数据的方法,这篇文章主要给大家介绍了关于JDBC获取数据库连接的5种方式,需要的朋友可以参考下
    2022-06-06
  • SpringCloud与Consul集成实现负载均衡功能

    SpringCloud与Consul集成实现负载均衡功能

    负载均衡基本概念有:实服务、实服务组、虚服务、调度算法、持续性等,其常用应用场景主要是服务器负载均衡,链路负载均衡。这篇文章主要介绍了SpringCloud与Consul集成实现负载均衡 ,需要的朋友可以参考下
    2018-09-09

最新评论