JDEPS(1)
π JDEPS(1) β like, the Java class dependency analyzer, bestie π
okay so this is from the JDK Commands manual and honestly? it's a whole vibe. jdeps is the little icon that tells you what your Java classes are depending on. let's get into it π«Ά
β¨ NAME β¨
jdeps β launch the Java class dependency analyzer π
β¨ SYNOPSIS β¨
jdeps [options] path ...
optionsβ command-line options, obviously π for the detailed descriptions of the options you can use, see:- Possible Options
- Module Dependence Analysis Options
- Options to Filter Dependences
- Options to Filter Classes to be Analyzed
pathβ a pathname to the.classfile, directory, or JAR file to analyze π
β¨ DESCRIPTION β¨
so the jdeps command shows the package-level or class-level dependencies of Java class files. literally its whole thing π
the input class can be 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 π
the options determine the output. by default, the jdeps command writes the dependencies to the system output. and get this β the command can generate the dependencies in DOT language (see the -dotoutput option). slay β¨
π POSSIBLE OPTIONS π
-?or-hor--helpβ prints the help message π-dotoutput diror--dot-output dirβ specifies the destination directory for DOT file output. if this option is specified, then thejdepscommand generates one.dotfile for each analyzed archive namedarchive-file-name.dotthat lists the dependencies, and also a summary file namedsummary.dotthat lists the dependencies among the archive files π¦-sor-summaryβ prints a dependency summary only. short and sweet, periodt π-vor-verboseβ prints all class-level dependencies. this is equivalent to
-verbose:class -filter:none
-verbose:packageβ prints package-level dependencies excluding, by default, dependencies within the same package πΈ-verbose:classβ prints class-level dependencies excluding, by default, dependencies within the same archive πΈ-apionlyor--api-onlyβ restricts the analysis to APIs, for example, dependences from the signature of public and protected members of public classes including field type, method parameter types, returned type, and checked exception types π₯-jdkinternalsor--jdk-internalsβ finds class-level dependences in the JDK internal APIs. by default, this option analyzes all classes specified in the--class-pathoption and input files unless you specified the-includeoption. you can't use this option with the-p,-e, and-soptions π
β οΈ Warning: The JDK internal APIs are inaccessible. (yes, for real β that's a warning, bestie, so likeβ¦ be careful π)
-cp path,-classpath path, or--class-path pathβ specifies where to find class files π--module-path module-pathβ specifies the module path β¨--upgrade-module-path module-pathβ specifies the upgrade module path β¨--system java-homeβ specifies 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.versionshould be an integer >=9orbaseπ§-qor-quietβ doesn't show missing dependencies from-generate-module-infooutput π€«-versionor--versionβ prints version information β
π¦ MODULE DEPENDENCE ANALYSIS OPTIONS π¦
-m module-nameor--module module-nameβ specifies the root module for analysis π--generate-module-info dirβ generatesmodule-info.javaunder the specified directory. the specified JAR files will be analyzed. this option cannot be used with--dot-outputor--class-pathoptions. use the--generate-open-moduleoption for open modules π--generate-open-module dirβ generatesmodule-info.javafor the specified JAR files under the specified directory as open modules. this option cannot be used with the--dot-outputor--class-pathoptions π--check module-name [, module-name...]β analyzes 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 and also the package names of JDK internal APIs (if referenced). this option transitively analyzes libraries on class path and module path if referenced. use--no-recursiveoption for non-transitive dependency analysis πΈ--list-reduced-depsβ same as--list-depswithout listing the implied reads edges from the module graph. if moduleM1readsM2, andM2requires transitive onM3, thenM1readingM3is implied and is not shown in the graph π--print-module-depsβ same as--list-reduced-depswith printing a comma-separated list of module dependences. the output can be used byjlink --add-modulesto create a custom image that contains those modules and their transitive dependences π₯--ignore-missing-depsβ ignore missing dependences. not me ignoring my problemsβ¦ but make it modules π
π OPTIONS TO FILTER DEPENDENCES π
-p pkg_name,-package pkg_name, or--package pkg_nameβ finds dependences matching the specified package name. you can specify this option multiple times for different packages. the-pand-eoptions are mutually exclusive π«Ά-e regex,-regex regex, or--regex regexβ finds dependences matching the specified pattern. the-pand-eoptions are mutually exclusive π«Ά--require module-nameβ finds dependences matching the given module name (may be given multiple times). the--package,--regex, and--requireoptions are mutually exclusive β-f regexor-filter regexβ filters dependences matching the given pattern. if give multiple times, the last one will be selected π-filter:packageβ filters dependences within the same package. this is the default π-filter:archiveβ filters dependences within the same archive π-filter:moduleβ filters dependences within the same module π-filter:noneβ no-filter:packageand-filter:archivefiltering. filtering specified via the-filteroption still applies β¨--missing-depsβ finds missing dependences. this option cannot be used with-p,-eand-soptions πΈ
π§ OPTIONS TO FILTER CLASSES TO BE ANALYZED π§
-include regexβ restricts analysis to the classes matching pattern. this option filters the list of classes to be analyzed. it can be used together with-pand-e, which apply the pattern to the dependencies π-Ror--recursiveβ recursively traverses all run-time dependences. the-Roption implies-filter:none. if-p,-e, or-foptions are specified, only the matching dependences are analyzed π--no-recursiveβ do not recursively traverse dependences π-Ior--inverseβ analyzes the dependences per other given options and then finds all artifacts that directly and indirectly depend on the matching nodes. this is equivalent to the inverse of the compile-time view analysis and the print dependency summary. this option must be used with the--require,--package, or--regexoptions π₯--compile-timeβ analyzes the compile-time view of transitive dependencies, such as the compile-time view of the-Roption. analyzes the dependences per other specified options. if a dependency is found from a directory, a JAR file or a module, all classes in that containing archive are analyzed π
π EXAMPLE OF ANALYZING DEPENDENCIES π
the following example demonstrates analyzing the dependencies of the Notepad.jar file. iconic behavior honestly π
Linux and 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
πΈ EXAMPLE USING THE --INVERSE OPTION πΈ
$ 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
π«Ά and that's the whole page, bestie. go analyze some dependencies, you're gonna eat π β¨
later, legend β this one's from the JDK 27-ea era, dated 2026, straight out of the JDK Commands manual ππ
π¦ where this page comes from
- epel 10: java-latest-openjdk-devel 1:27.0.0.0.35-0.0.1.0.ea.el10_3 Β· Apache-1.1 AND Apache-2.0 AND LicenseRef-Callaway-BSD AND LicenseRef-Callaway-BSD-with-advertising AND GPL-1.0-or-later AND GPL-2.0-only AND LicenseRef-Callaway-GPLv2-with-exceptions AND IJG AND LicenseRef-Callaway-LGPLv2+ AND LicenseRef-Callaway-MIT AND MPL-2.0 AND LicenseRef-Callaway-Public-Domain AND W3C AND Zlib AND ISC AND FTL AND LicenseRef-RSA
- epel 10: java-latest-openjdk-devel-fastdebug 1:27.0.0.0.35-0.0.1.0.ea.el10_3 Β· Apache-1.1 AND Apache-2.0 AND LicenseRef-Callaway-BSD AND LicenseRef-Callaway-BSD-with-advertising AND GPL-1.0-or-later AND GPL-2.0-only AND LicenseRef-Callaway-GPLv2-with-exceptions AND IJG AND LicenseRef-Callaway-LGPLv2+ AND LicenseRef-Callaway-MIT AND MPL-2.0 AND LicenseRef-Callaway-Public-Domain AND W3C AND Zlib AND ISC AND FTL AND LicenseRef-RSA
- epel 10: java-latest-openjdk-devel-slowdebug 1:27.0.0.0.35-0.0.1.0.ea.el10_3 Β· Apache-1.1 AND Apache-2.0 AND LicenseRef-Callaway-BSD AND LicenseRef-Callaway-BSD-with-advertising AND GPL-1.0-or-later AND GPL-2.0-only AND LicenseRef-Callaway-GPLv2-with-exceptions AND IJG AND LicenseRef-Callaway-LGPLv2+ AND LicenseRef-Callaway-MIT AND MPL-2.0 AND LicenseRef-Callaway-Public-Domain AND W3C AND Zlib AND ISC AND FTL AND LicenseRef-RSA
- epel 9: java-latest-openjdk-devel 1:27.0.0.0.35-0.0.1.0.ea.el9 Β· Apache-1.1 AND Apache-2.0 AND LicenseRef-Callaway-BSD AND LicenseRef-Callaway-BSD-with-advertising AND GPL-1.0-or-later AND GPL-2.0-only AND LicenseRef-Callaway-GPLv2-with-exceptions AND IJG AND LicenseRef-Callaway-LGPLv2+ AND LicenseRef-Callaway-MIT AND MPL-2.0 AND LicenseRef-Callaway-Public-Domain AND W3C AND Zlib AND ISC AND FTL AND LicenseRef-RSA
- epel 9: java-latest-openjdk-devel-fastdebug 1:27.0.0.0.35-0.0.1.0.ea.el9 Β· Apache-1.1 AND Apache-2.0 AND LicenseRef-Callaway-BSD AND LicenseRef-Callaway-BSD-with-advertising AND GPL-1.0-or-later AND GPL-2.0-only AND LicenseRef-Callaway-GPLv2-with-exceptions AND IJG AND LicenseRef-Callaway-LGPLv2+ AND LicenseRef-Callaway-MIT AND MPL-2.0 AND LicenseRef-Callaway-Public-Domain AND W3C AND Zlib AND ISC AND FTL AND LicenseRef-RSA
- epel 9: java-latest-openjdk-devel-slowdebug 1:27.0.0.0.35-0.0.1.0.ea.el9 Β· Apache-1.1 AND Apache-2.0 AND LicenseRef-Callaway-BSD AND LicenseRef-Callaway-BSD-with-advertising AND GPL-1.0-or-later AND GPL-2.0-only AND LicenseRef-Callaway-GPLv2-with-exceptions AND IJG AND LicenseRef-Callaway-LGPLv2+ AND LicenseRef-Callaway-MIT AND MPL-2.0 AND LicenseRef-Callaway-Public-Domain AND W3C AND Zlib AND ISC AND FTL AND LicenseRef-RSA
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms