jdeps - Class Dependency Analyzer Command

This section describes what is 'jdeps' - is a command line tool to run the Java Class Dependency Analyzer tool.

What Is "jdeps"? - "jdeps", Java Class Dependency Analyzer tool, is a command line tool to show the package-level or class-level dependencies of given Java class files. Input classes can be given as a path name to a .class file, a directory, a JAR file, or it can be a fully qualified class name to analyze all class files.

"jdeps" has been included in JDK installation since JDK 8. And it is represented by the %java_home%\bin\jdeps.exe program file.

If you have %java_home%\bin directory included in "path" the environment variable, you can run "jdeps --help" to see a complete list of all options:

herong> jdeps --help

Usage: jdeps <options> <path ...>]
<path> can be a pathname to a .class file, a directory, a JAR file.

Possible options include:
  -h -? --help         Print this help message
  -dotoutput <dir>
  --dot-output <dir>   Destination directory for DOT file output
  -s       -summary    Print dependency summary only.
  -v       -verbose    Print all class level dependences
                       Equivalent to -verbose:class -filter:none.
  -verbose:package     Print package-level dependences excluding
                       dependences within the same package by default
  -verbose:class       Print class-level dependences excluding
                       dependences within the same package by default
  -apionly
  --api-only           Restrict analysis to APIs i.e. dependences
                       from the signature of public and protected
                       members of public classes including field
                       type, method parameter types, returned type,
                       checked exception types etc.
  -jdkinternals
  --jdk-internals      Finds class-level dependences on JDK internal
                       APIs. By default, it analyzes all classes
                       on --class-path and input files unless -include
                       option is specified. This option cannot be
                       used with -p, -e and -s options.
                       WARNING: JDK internal APIs are inaccessible.
  -cp <path>
  -classpath <path>
  --class-path <path>  Specify where to find class files
  --module-path <module path> Specify module path
  --upgrade-module-path <module path>  Specify upgrade module path
  --system <java-home> Specify an alternate system module path
  --add-modules <module-name>[,<module-name>...]
                       Adds modules to the root set for analysis
  --multi-release <version> Specifies the version when processing
                       multi-release jar files.  <version> should
                       be integer >= 9 or base.
  -q       -quiet      Suppress warning messages
  -version --version   Version information

Module dependence analysis options:
  -m <module-name>
  --module <module-name> Specify the root module for analysis
  --generate-module-info <dir> Generate module-info.java under the specified
                       directory. The specified JAR files will be
                       analyzed. This option cannot be used with
                       --dot-output or --class-path. Use
                       --generate-open-module option for open modules.
  --generate-open-module <dir> Generate module-info.java for the specified
                       JAR files under the specified directory as
                       open modules. This option cannot be used with
                       --dot-output or --class-path.
  --check <module-name>[,<module-name>...
                       Analyze the dependence of the specified modules
                       It prints the module descriptor, the resulting
                       module dependences after analysis and the
                       graph after transition reduction.  It also
                       identifies any unused qualified exports.
  --list-deps          Lists the module dependences.  It also prints
                       any internal API packages if referenced.
                       This option transitively analyzes libraries on
                       class path and module path if referenced.
                       Use --no-recursive option for non-transitive
                       dependency analysis.
  --list-reduced-deps  Same as --list-deps with not listing
                       the implied reads edges from the module graph.
                       If module M1 reads M2, and M2 requires
                       transitive on M3, then M1 reading M3 is implied
                       and is not shown in the graph.
  --print-module-deps  Same as --list-reduced-deps with printing
                       a comma-separated list of module dependences.
                       This output can be used by jlink --add-modules
                       in order to create a custom image containing
                       those modules and their transitive dependences.
  --ignore-missing-deps Ignore missing dependences.

Options to filter dependences:
  -p <pkg>
  -package <pkg>
  --package <pkg>      Finds dependences matching the given package
                       name (may be given multiple times).
  -e <regex>
  -regex <regex>
  --regex <regex>      Finds dependences matching the given pattern.
  --require <module-name> Finds dependences matching the given module
                       name (may be given multiple times). --package,
                       --regex, --require are mutual exclusive.
  -f <regex> -filter <regex> Filter dependences matching the given
                       pattern. If given multiple times, the last
                       one will be used.
  -filter:package      Filter dependences within the same package.
                       This is the default.
  -filter:archive      Filter dependences within the same archive.
  -filter:module       Filter dependences within the same module.
  -filter:none         No -filter:package and -filter:archive
                       filtering.  Filtering specified via the
                       -filter option still applies.

  --missing-deps       Finds missing dependences.  This option
                       cannot be used with -p, -e and -s options.

Options to filter classes to be analyzed:
  -include <regex>     Restrict analysis to classes matching pattern
                       This option filters the list of classes to
                       be analyzed.  It can be used together with
                       -p and -e which apply pattern to the dependences
  -P       -profile    Show profile containing a package
  -R
  --recursive          Recursively traverse all run-time dependences.
                       The -R option implies -filter:none.  If -p,
                       -e, -f option is specified, only the matching
                       dependences are analyzed.
  --no-recursive       Do not recursively traverse dependences.
  -I
  --inverse            Analyzes the dependences per other given options
                       and then find all artifacts that directly
                       and indirectly depend on the matching nodes.
                       This is equivalent to the inverse of
                       compile-time view analysis and print
                       dependency summary.  This option must use
                       with --require, --package or --regex option.
  --compile-time       Compile-time view of transitive dependences
                       i.e. compile-time view of -R option.
                       Analyzes the dependences per other given options
                       If a dependence is found from a directory,
                       a JAR file or a module, all classes in that
                       containing archive are analyzed.

For more information, see "jdeps" reference page at https://docs.oracle.com/en/java/javase/17/docs/specs/man/jdeps.html.

Table of Contents

 About This Book

 Java Tools Terminology

 Java Tools Included in JDK

 javac - The Java Program Compiler

 java - The Java Program Launcher

 jar - The JAR File Tool

 jlink - The JRE Linker

 jmod - The JMOD File Tool

 jimage - The JIMAGE File Tool

 jpackage - Binary Package Builder

 javadoc - The Java Document Generator

jdeps - The Java Class Dependency Analyzer

jdeps - Class Dependency Analyzer Command

 "jdeps class_file" - Dependencies of Class File

 "jdeps -verbose" - Class Level Dependencies of Class File

 "jdeps jar_file" - Dependencies of JAR File

 "jdeps --inverse --require ..." - Reverse Dependencies

 jdeprscan - The Java Deprecated API Scanner

 jdb - The Java Debugger

 jcmd - The JVM Diagnostic Tool

 jconsole - Java Monitoring and Management Console

 jstat - JVM Statistics Monitoring Tool

 JVM Troubleshooting Tools

 jhsdb - The Java HotSpot Debugger

 jvisualvm (Java VisualVM) - JVM Visual Tool

 jmc - Java Mission Control

 javap - The Java Class File Disassembler

 keytool - Public Key Certificate Tool

 jarsigner - JAR File Signer

 jshell - Java Language Shell

 jrunscript - Script Code Shell

 Miscellaneous Tools

 native2ascii - Native-to-ASCII Encoding Converter

 JAB (Java Access Bridge) for Windows

 Archived Tutorials

 References

 Full Version in PDF/EPUB