| .\" Copyright (c) 2013, 2023, Oracle and/or its affiliates. All rights reserved. |
| .\" DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
| .\" |
| .\" This code is free software; you can redistribute it and/or modify it |
| .\" under the terms of the GNU General Public License version 2 only, as |
| .\" published by the Free Software Foundation. |
| .\" |
| .\" This code is distributed in the hope that it will be useful, but WITHOUT |
| .\" ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
| .\" FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
| .\" version 2 for more details (a copy is included in the LICENSE file that |
| .\" accompanied this code). |
| .\" |
| .\" You should have received a copy of the GNU General Public License version |
| .\" 2 along with this work; if not, write to the Free Software Foundation, |
| .\" Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. |
| .\" |
| .\" Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA |
| .\" or visit www.oracle.com if you need additional information or have any |
| .\" questions. |
| .\" |
| .\" Automatically generated by Pandoc 2.19.2 |
| .\" |
| .\" Define V font for inline verbatim, using C font in formats |
| .\" that render this, and otherwise B font. |
| .ie "\f[CB]x\f[R]"x" \{\ |
| . ftr V B |
| . ftr VI BI |
| . ftr VB B |
| . ftr VBI BI |
| .\} |
| .el \{\ |
| . ftr V CR |
| . ftr VI CI |
| . ftr VB CB |
| . ftr VBI CBI |
| .\} |
| .TH "JDEPS" "1" "2023" "JDK 21" "JDK Commands" |
| .hy |
| .SH NAME |
| .PP |
| jdeps - launch the Java class dependency analyzer |
| .SH SYNOPSIS |
| .PP |
| \f[V]jdeps\f[R] [\f[I]options\f[R]] \f[I]path\f[R] ... |
| .TP |
| \f[I]options\f[R] |
| Command-line options. |
| For detailed descriptions of the options that can be used, see |
| .RS |
| .IP \[bu] 2 |
| \f[B]Possible Options\f[R] |
| .IP \[bu] 2 |
| \f[B]Module Dependence Analysis Options\f[R] |
| .IP \[bu] 2 |
| \f[B]Options to Filter Dependences\f[R] |
| .IP \[bu] 2 |
| \f[B]Options to Filter Classes to be Analyzed\f[R] |
| .RE |
| .TP |
| \f[I]path\f[R] |
| A pathname to the \f[V].class\f[R] file, directory, or JAR file to |
| analyze. |
| .SH DESCRIPTION |
| .PP |
| The \f[V]jdeps\f[R] command shows the package-level or class-level |
| dependencies of Java class files. |
| The input class can be a path name to a \f[V].class\f[R] 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 \f[V]jdeps\f[R] command writes the dependencies to the |
| system output. |
| The command can generate the dependencies in DOT language (see the |
| \f[V]-dotoutput\f[R] option). |
| .SH POSSIBLE OPTIONS |
| .TP |
| \f[V]-?\f[R] or \f[V]-h\f[R] or \f[V]--help\f[R] |
| Prints the help message. |
| .TP |
| \f[V]-dotoutput\f[R] \f[I]dir\f[R] or \f[V]--dot-output\f[R] \f[I]dir\f[R] |
| Specifies the destination directory for DOT file output. |
| If this option is specified, then the \f[V]jdeps\f[R]command generates |
| one \f[V].dot\f[R] file for each analyzed archive named |
| \f[V]archive-file-name.dot\f[R] that lists the dependencies, and also a |
| summary file named \f[V]summary.dot\f[R] that lists the dependencies |
| among the archive files. |
| .TP |
| \f[V]-s\f[R] or \f[V]-summary\f[R] |
| Prints a dependency summary only. |
| .TP |
| \f[V]-v\f[R] or \f[V]-verbose\f[R] |
| Prints all class-level dependencies. |
| This is equivalent to |
| .RS |
| .RS |
| .PP |
| \f[V]-verbose:class -filter:none\f[R] |
| .RE |
| .RE |
| .TP |
| \f[V]-verbose:package\f[R] |
| Prints package-level dependencies excluding, by default, dependences |
| within the same package. |
| .TP |
| \f[V]-verbose:class\f[R] |
| Prints class-level dependencies excluding, by default, dependencies |
| within the same archive. |
| .TP |
| \f[V]-apionly\f[R] or \f[V]--api-only\f[R] |
| Restricts the analysis to APIs, for example, dependences from the |
| signature of \f[V]public\f[R] and \f[V]protected\f[R] members of public |
| classes including field type, method parameter types, returned type, and |
| checked exception types. |
| .TP |
| \f[V]-jdkinternals\f[R] or \f[V]--jdk-internals\f[R] |
| Finds class-level dependences in the JDK internal APIs. |
| By default, this option analyzes all classes specified in the |
| \f[V]--classpath\f[R] option and input files unless you specified the |
| \f[V]-include\f[R] option. |
| You can\[aq]t use this option with the \f[V]-p\f[R], \f[V]-e\f[R], and |
| \f[V]-s\f[R] options. |
| .RS |
| .PP |
| \f[B]Warning\f[R]: The JDK internal APIs are inaccessible. |
| .RE |
| .TP |
| \f[V]-cp\f[R] \f[I]path\f[R], \f[V]-classpath\f[R] \f[I]path\f[R], or \f[V]--class-path\f[R] \f[I]path\f[R] |
| Specifies where to find class files. |
| .TP |
| \f[V]--module-path\f[R] \f[I]module-path\f[R] |
| Specifies the module path. |
| .TP |
| \f[V]--upgrade-module-path\f[R] \f[I]module-path\f[R] |
| Specifies the upgrade module path. |
| .TP |
| \f[V]--system\f[R] \f[I]java-home\f[R] |
| Specifies an alternate system module path. |
| .TP |
| \f[V]--add-modules\f[R] \f[I]module-name\f[R][\f[V],\f[R] \f[I]module-name\f[R]...] |
| Adds modules to the root set for analysis. |
| .TP |
| \f[V]--multi-release\f[R] \f[I]version\f[R] |
| Specifies the version when processing multi-release JAR files. |
| \f[I]version\f[R] should be an integer >=9 or base. |
| .TP |
| \f[V]-q\f[R] or \f[V]-quiet\f[R] |
| Doesn\[aq]t show missing dependencies from |
| \f[V]-generate-module-info\f[R] output. |
| .TP |
| \f[V]-version\f[R] or \f[V]--version\f[R] |
| Prints version information. |
| .SH MODULE DEPENDENCE ANALYSIS OPTIONS |
| .TP |
| \f[V]-m\f[R] \f[I]module-name\f[R] or \f[V]--module\f[R] \f[I]module-name\f[R] |
| Specifies the root module for analysis. |
| .TP |
| \f[V]--generate-module-info\f[R] \f[I]dir\f[R] |
| Generates \f[V]module-info.java\f[R] under the specified directory. |
| The specified JAR files will be analyzed. |
| This option cannot be used with \f[V]--dot-output\f[R] or |
| \f[V]--class-path\f[R] options. |
| Use the \f[V]--generate-open-module\f[R] option for open modules. |
| .TP |
| \f[V]--generate-open-module\f[R] \f[I]dir\f[R] |
| Generates \f[V]module-info.java\f[R] for the specified JAR files under |
| the specified directory as open modules. |
| This option cannot be used with the \f[V]--dot-output\f[R] or |
| \f[V]--class-path\f[R] options. |
| .TP |
| \f[V]--check\f[R] \f[I]module-name\f[R] [\f[V],\f[R] \f[I]module-name\f[R]...] |
| 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. |
| .TP |
| \f[V]--list-deps\f[R] |
| 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 \f[V]--no-recursive\f[R] option for non-transitive dependency |
| analysis. |
| .TP |
| \f[V]--list-reduced-deps\f[R] |
| Same as \f[V]--list-deps\f[R] without 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. |
| .TP |
| \f[V]--print-module-deps\f[R] |
| Same as \f[V]--list-reduced-deps\f[R] with printing a comma-separated |
| list of module dependences. |
| The output can be used by \f[V]jlink --add-modules\f[R] to create a |
| custom image that contains those modules and their transitive |
| dependences. |
| .TP |
| \f[V]--ignore-missing-deps\f[R] |
| Ignore missing dependences. |
| .SH OPTIONS TO FILTER DEPENDENCES |
| .TP |
| \f[V]-p\f[R] \f[I]pkg_name\f[R], \f[V]-package\f[R] \f[I]pkg_name\f[R], or \f[V]--package\f[R] \f[I]pkg_name\f[R] |
| Finds dependences matching the specified package name. |
| You can specify this option multiple times for different packages. |
| The \f[V]-p\f[R] and \f[V]-e\f[R] options are mutually exclusive. |
| .TP |
| \f[V]-e\f[R] \f[I]regex\f[R], \f[V]-regex\f[R] \f[I]regex\f[R], or \f[V]--regex\f[R] \f[I]regex\f[R] |
| Finds dependences matching the specified pattern. |
| The \f[V]-p\f[R] and \f[V]-e\f[R] options are mutually exclusive. |
| .TP |
| \f[V]--require\f[R] \f[I]module-name\f[R] |
| Finds dependences matching the given module name (may be given multiple |
| times). |
| The \f[V]--package\f[R], \f[V]--regex\f[R], and \f[V]--require\f[R] |
| options are mutually exclusive. |
| .TP |
| \f[V]-f\f[R] \f[I]regex\f[R] or \f[V]-filter\f[R] \f[I]regex\f[R] |
| Filters dependences matching the given pattern. |
| If give multiple times, the last one will be selected. |
| .TP |
| \f[V]-filter:package\f[R] |
| Filters dependences within the same package. |
| This is the default. |
| .TP |
| \f[V]-filter:archive\f[R] |
| Filters dependences within the same archive. |
| .TP |
| \f[V]-filter:module\f[R] |
| Filters dependences within the same module. |
| .TP |
| \f[V]-filter:none\f[R] |
| No \f[V]-filter:package\f[R] and \f[V]-filter:archive\f[R] filtering. |
| Filtering specified via the \f[V]-filter\f[R] option still applies. |
| .TP |
| \f[V]--missing-deps\f[R] |
| Finds missing dependences. |
| This option cannot be used with \f[V]-p\f[R], \f[V]-e\f[R] and |
| \f[V]-s\f[R] options. |
| .SH OPTIONS TO FILTER CLASSES TO BE ANALYZED |
| .TP |
| \f[V]-include\f[R] \f[I]regex\f[R] |
| Restricts analysis to the classes matching pattern. |
| This option filters the list of classes to be analyzed. |
| It can be used together with \f[V]-p\f[R] and \f[V]-e\f[R], which apply |
| the pattern to the dependencies. |
| .TP |
| \f[V]-P\f[R] or \f[V]-profile\f[R] |
| Shows the profile containing a package. |
| This option is deprecated and may be removed in a future release. |
| .TP |
| \f[V]-R\f[R] or \f[V]--recursive\f[R] |
| Recursively traverses all run-time dependences. |
| The \f[V]-R\f[R] option implies \f[V]-filter:none\f[R]. |
| If \f[V]-p\f[R], \f[V]-e\f[R], or \f[V]-f\f[R] options are specified, |
| only the matching dependences are analyzed. |
| .TP |
| \f[V]--no-recursive\f[R] |
| Do not recursively traverse dependences. |
| .TP |
| \f[V]-I\f[R] or \f[V]--inverse\f[R] |
| 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 \f[V]--require\f[R], |
| \f[V]--package\f[R], or \f[V]--regex\f[R] options. |
| .TP |
| \f[V]--compile-time\f[R] |
| Analyzes the compile-time view of transitive dependencies, such as the |
| compile-time view of the \f[V]-R\f[R] option. |
| 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. |
| .SH EXAMPLE OF ANALYZING DEPENDENCIES |
| .PP |
| The following example demonstrates analyzing the dependencies of the |
| \f[V]Notepad.jar\f[R] file. |
| .PP |
| \f[B]Linux and macOS:\f[R] |
| .IP |
| .nf |
| \f[CB] |
| $ 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 |
| \f[R] |
| .fi |
| .PP |
| \f[B]Windows:\f[R] |
| .IP |
| .nf |
| \f[CB] |
| C:\[rs]Java\[rs]jdk1.9.0>jdeps demo\[rs]jfc\[rs]Notepad\[rs]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 |
| \f[R] |
| .fi |
| .SH EXAMPLE USING THE --INVERSE OPTION |
| .IP |
| .nf |
| \f[CB] |
| $ 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 |
| \f[R] |
| .fi |