系列中的上一篇
当前教程
Jdeps - 分析您的 Java 类依赖项

系列中的上一篇: Jmod - 创建 JMOD 存档

系列中的下一篇: Jdeprscan - 已弃用 API 元素扫描器

Jdeps - 分析您的 Java 类依赖项

 

介绍 jdeps

jdeps - 启动 Java 类依赖项分析器

 

概要

jdeps [options] path ...

options 命令行选项。有关可使用选项的详细说明,请参见

Possible Options
Module Dependency Analysis Options
Options to Filter Dependencies
Options to Filter Classes to be Analyzed

path 要分析的 .class 文件、目录或 JAR 文件的路径名。

 

描述

jdeps 命令显示 Java 类文件的包级或类级依赖项。输入类可以是 .class 文件、目录、JAR 文件的路径名,也可以是用于分析所有类文件的完全限定类名。选项决定输出。默认情况下,jdeps 命令将依赖项写入系统输出。该命令可以以 DOT 语言生成依赖项(参见 -dotoutput 选项)。

 

选项

-dotoutput dir--dot-output dir 指定 DOT 文件输出的目标目录。如果指定了此选项,则 jdeps 命令将为每个分析的存档生成一个名为 archive-file-name.dot 的 .dot 文件,其中列出了依赖项,以及一个名为 summary.dot 的摘要文件,其中列出了存档文件之间的依赖项。

-s-summary 仅打印依赖项摘要。

-v-verbose 打印所有类级依赖项。这等效于

-verbose:class -filter:none

-verbose:package 打印包级依赖项,默认情况下不包括同一包内的依赖项。

-verbose:class 打印类级依赖项,默认情况下不包括同一存档内的依赖项。

-apionly--api-only 将分析限制为 API,例如,来自公共类(包括字段类型、方法参数类型、返回类型和已检查异常类型)的公共和受保护成员签名的依赖项。

-jdkinternals 或 --jdk-internals 在 JDK 内部 API 中查找类级依赖项。默认情况下,此选项分析在 --class-path 或 -classpathoption 和输入文件中指定的类,除非您指定了 -include 选项。您不能将此选项与 -p、-e 和 -s 选项一起使用。

警告:JDK 内部 API 不可访问。

-cp path-classpath path--class-path path 指定在何处查找类文件。

--module-path module-path 指定模块路径。

--upgrade-module-path module-path 指定升级模块路径。

--system java-home 指定备用系统模块路径。

--add-modules module-name [, module-name...] 将模块添加到分析的根集。

--multi-release version 在处理多版本 JAR 文件时指定版本。version 应为大于等于 9 的整数或 base。

—q 或 -quite 不显示来自 –generate-module-info 输出的缺少依赖项。

-version--version 打印版本信息。

 

模块依赖项分析选项

–m module-name--module module-name 指定分析的根模块。

--generate-module-info dir 在指定的目录下生成 module-info.java。将分析指定的 JAR 文件。此选项不能与 --dot-output--class-path 选项一起使用。对于开放模块,请使用 --generate-open-module 选项。

--generate-open-module dir 在指定的目录下为指定的 JAR 文件生成 module-info.java 作为开放模块。此选项不能与 --dot-output 或 --class-path 选项一起使用。

--check module-name [, module-name...] 分析指定模块的依赖项。它打印模块描述符、分析后的结果模块依赖项以及转换减少后的图形。它还识别任何未使用的限定导出。

--list-deps 列出模块依赖项以及 JDK 内部 API(如果引用)的包名。

--list—reduced-deps--list-deps 相同,但不列出模块图中的隐式读取边。如果模块 M1 读取 M2,而 M2 对 M3 具有传递依赖项,则 M1 读取 M3 是隐式的,不会显示在图形中。

--print-module-deps--list-reduced-deps 相同,但打印模块依赖项的逗号分隔列表。输出可由 jlink --add-modules 使用,以创建包含这些模块及其传递依赖项的自定义映像。

 

用于过滤依赖项的选项

-p pkg name-package pkg name--package pkg name 查找与指定包名匹配的依赖项。您可以多次指定此选项以用于不同的包。-p-e 选项是互斥的。

-e regex-regex regex--regex regex 查找与指定模式匹配的依赖项。-p-e 选项是互斥的。

--require module-name 查找与给定模块名匹配的依赖项(可以多次指定)。--package--regex--require 选项是互斥的。

-f regex 或 -filter regex 过滤与给定模式匹配的依赖项。如果多次给出,则将选择最后一个。

-filter:package 过滤同一包内的依赖项。这是默认设置。

-filter:archive 过滤同一存档内的依赖项。

-filter:module 过滤同一模块内的依赖项。

-filter:none 没有 -filter:package 和 -filter:archive 过滤。通过 -filter 选项指定的过滤仍然适用。

 

用于过滤要分析的类的选项

-include regex 将分析限制为与模式匹配的类。此选项过滤要分析的类列表。它可以与 -p 和 -e 一起使用,后者将模式应用于依赖项。

-P-profile 显示包含包的配置文件。

-R-recursive 递归遍历所有运行时依赖项。-R 选项意味着 -filter:none。如果指定了 -p、-e 或 -f 选项,则仅分析匹配的依赖项。

-I 或 -inverse 分析其他给定选项的依赖项,然后查找直接和间接依赖于匹配节点的所有工件。这等效于编译时视图分析的逆运算和打印依赖项摘要。此选项必须与 --require--package--regex 选项一起使用。

--compile-time 分析传递依赖项的编译时视图,例如 -R 选项的编译时视图。分析其他指定选项的依赖项。如果从目录、JAR 文件或模块中找到依赖项,则分析包含该存档的所有类。

 

分析依赖项的示例

以下示例演示了分析 Notepad.jar 文件的依赖项。

Linux 和 macOS

$ jdeps demo/jfc/Notepad/Notepad.jar
Notepad.jar -> java.base
Notepad.jar -> java.desktop
Notepad.jar -> java.logging
   <unnamed> (Notepad.jar)
      -> java.awt
      -> java.awt.event
      -> java.beans
      -> java.io
      -> java.lang
      -> java.net
      -> java.util
      -> java.util.logging
      -> javax.swing
      -> javax.swing.border
      -> javax.swing.event
      -> javax.swing.text
      -> javax.swing.tree
      -> javax.swing.undo

Windows

C:\Java\jdk1.9.0>jdeps demo\jfc\Notepad\Notepad.jar
Notepad.jar -> java.base
Notepad.jar -> java.desktop
Notepad.jar -> java.logging
   <unnamed> (Notepad.jar)
      -> java.awt
      -> java.awt.event
      -> java.beans
      -> java.io
      -> java.lang
      -> java.net
      -> java.util
      -> java.util.logging
      -> javax.swing
      -> javax.swing.border
      -> javax.swing.event
      -> javax.swing.text
      -> javax.swing.tree
      -> javax.swing.undo

使用 --inverse 选项

$ jdeps --inverse --require java.xml.bind  
Inverse transitive dependences on [java.xml.bind] 
java.xml.bind <- java.se.ee 
java.xml.bind <- jdk.xml.ws 
java.xml.bind <- java.xml.ws <- java.se.ee 
java.xml.bind <- java.xml.ws <- jdk.xml.ws 
java.xml.bind <- jdk.xml.bind <- jdk.xml.ws  

更多学习


上次更新: 2021 年 9 月 14 日


系列中的上一篇
当前教程
Jdeps - 分析您的 Java 类依赖项

系列中的上一篇: Jmod - 创建 JMOD 存档

系列中的下一篇: Jdeprscan - 已弃用 API 元素扫描器