| '\" t |
| .\" Copyright (c) 2013, 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. |
| .\" |
| .\" Arch: generic |
| .\" Software: JDK 8 |
| .\" Date: 21 November 2013 |
| .\" SectDesc: Basic Tools |
| .\" Title: jdeps.1 |
| .\" |
| .if n .pl 99999 |
| .TH jdeps 1 "21 November 2013" "JDK 8" "Basic Tools" |
| .\" ----------------------------------------------------------------- |
| .\" * Define some portability stuff |
| .\" ----------------------------------------------------------------- |
| .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| .\" http://bugs.debian.org/507673 |
| .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html |
| .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| .ie \n(.g .ds Aq \(aq |
| .el .ds Aq ' |
| .\" ----------------------------------------------------------------- |
| .\" * set default formatting |
| .\" ----------------------------------------------------------------- |
| .\" disable hyphenation |
| .nh |
| .\" disable justification (adjust text to left margin only) |
| .ad l |
| .\" ----------------------------------------------------------------- |
| .\" * MAIN CONTENT STARTS HERE * |
| .\" ----------------------------------------------------------------- |
| |
| .SH NAME |
| jdeps \- Java class dependency analyzer\&. |
| .SH SYNOPSIS |
| .sp |
| .nf |
| |
| \fBjdeps\fR [\fIoptions\fR] \fIclasses\fR \&.\&.\&. |
| .fi |
| .sp |
| .TP |
| \fIoptions\fR |
| Command-line options\&. See Options\&. |
| .TP |
| \fIclasses\fR |
| Name of the classes to analyze\&. You can specify a class that can be found in the class path, by its file name, a directory, or a JAR file\&. |
| .SH DESCRIPTION |
| The \fI\fR\f3jdeps\fR command shows the package-level or class-level dependencies of Java class files\&. The input class can be a path name to a \f3\&.class\fR 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, \f3jdeps\fR outputs the dependencies to the system output\&. It can generate the dependencies in DOT language (see the \f3-dotoutput\fR option)\&. |
| .SH OPTIONS |
| .TP |
| -dotoutput <\fIdir\fR> |
| .br |
| Destination directory for DOT file output\&. If specified, \f3jdeps\fR will generate one dot file per each analyzed archive named <\fIarchive-file-name\fR>\&.dot listing the dependencies, and also a summary file named summary\&.dot listing the dependencies among the archives\&. |
| .TP |
| -s, -summary |
| .br |
| Prints dependency summary only\&. |
| .TP |
| -v, -verbose |
| .br |
| Prints all class-level dependencies\&. |
| .TP |
| -verbose:package |
| .br |
| Prints package-level dependencies excluding dependencies within the same archive\&. |
| .TP |
| -verbose:class |
| .br |
| Prints class-level dependencies excluding dependencies within the same archive\&. |
| .TP |
| -cp <\fIpath\fR>, -classpath <\fIpath\fR> |
| .br |
| Specifies where to find class files\&. |
| |
| See also Setting the Class Path\&. |
| .TP |
| -p <\fIpkg name\fR>, -package <\fIpkg name\fR> |
| .br |
| Finds dependencies in the specified package\&. You can specify this option multiple times for different packages\&. The \f3-p\fR and \f3-e\fR options are mutually exclusive\&. |
| .TP |
| -e <\fIregex\fR>, -regex <\fIregex\fR> |
| .br |
| Finds dependencies in packages matching the specified regular expression pattern\&. The \f3-p\fR and \f3-e\fR options are mutually exclusive\&. |
| .TP |
| -include <\fIregex\fR> |
| .br |
| Restricts analysis to classes matching pattern\&. This option filters the list of classes to be analyzed\&. It can be used together with \f3-p\fR and \f3-e\fR which apply pattern to the dependencies\&. |
| .TP |
| -jdkinternals |
| .br |
| Finds class-level dependences in JDK internal APIs\&. By default, it analyzes all classes specified in the \f3-classpath\fR option and in input files unless you specified the \f3-include\fR option\&. You cannot use this option with the \f3-p\fR, \f3-e\fR, and \f3-s\fR options\&. |
| |
| \fIWarning\fR: JDK internal APIs may not be accessible in upcoming releases\&. |
| .TP |
| -P, -profile |
| .br |
| Shows profile or the file containing a package\&. |
| .TP |
| -apionly |
| .br |
| Restricts analysis to APIs, for example, dependences from the signature of \f3public\fR and \f3protected\fR members of public classes including field type, method parameter types, returned type, and checked exception types\&. |
| .TP |
| -R, -recursive |
| .br |
| Recursively traverses all dependencies\&. |
| .TP |
| -version |
| .br |
| Prints version information\&. |
| .TP |
| -h, -?, -help |
| .br |
| Prints help message for \f3jdeps\fR\&. |
| .SH EXAMPLES |
| Analyzing the dependencies of Notepad\&.jar\&. |
| .sp |
| .nf |
| \f3$ jdeps demo/jfc/Notepad/Notepad\&.jar\fP |
| .fi |
| .nf |
| \f3\fP |
| .fi |
| .nf |
| \f3demo/jfc/Notepad/Notepad\&.jar \-> /usr/java/jre/lib/rt\&.jar\fP |
| .fi |
| .nf |
| \f3 <unnamed> (Notepad\&.jar)\fP |
| .fi |
| .nf |
| \f3 \-> java\&.awt \fP |
| .fi |
| .nf |
| \f3 \-> java\&.awt\&.event \fP |
| .fi |
| .nf |
| \f3 \-> java\&.beans \fP |
| .fi |
| .nf |
| \f3 \-> java\&.io \fP |
| .fi |
| .nf |
| \f3 \-> java\&.lang \fP |
| .fi |
| .nf |
| \f3 \-> java\&.net \fP |
| .fi |
| .nf |
| \f3 \-> java\&.util \fP |
| .fi |
| .nf |
| \f3 \-> java\&.util\&.logging \fP |
| .fi |
| .nf |
| \f3 \-> javax\&.swing \fP |
| .fi |
| .nf |
| \f3 \-> javax\&.swing\&.border \fP |
| .fi |
| .nf |
| \f3 \-> javax\&.swing\&.event \fP |
| .fi |
| .nf |
| \f3 \-> javax\&.swing\&.text \fP |
| .fi |
| .nf |
| \f3 \-> javax\&.swing\&.tree \fP |
| .fi |
| .nf |
| \f3 \-> javax\&.swing\&.undo \fP |
| .fi |
| .nf |
| \f3\fP |
| .fi |
| .sp |
| Use -P or -profile option to show on which profile that Notepad depends\&. |
| .sp |
| .nf |
| \f3$ jdeps \-profile demo/jfc/Notepad/Notepad\&.jar \fP |
| .fi |
| .nf |
| \f3demo/jfc/Notepad/Notepad\&.jar \-> /usr/java/jre/lib/rt\&.jar (Full JRE)\fP |
| .fi |
| .nf |
| \f3 <unnamed> (Notepad\&.jar)\fP |
| .fi |
| .nf |
| \f3 \-> java\&.awt Full JRE\fP |
| .fi |
| .nf |
| \f3 \-> java\&.awt\&.event Full JRE\fP |
| .fi |
| .nf |
| \f3 \-> java\&.beans Full JRE\fP |
| .fi |
| .nf |
| \f3 \-> java\&.io compact1\fP |
| .fi |
| .nf |
| \f3 \-> java\&.lang compact1\fP |
| .fi |
| .nf |
| \f3 \-> java\&.net compact1\fP |
| .fi |
| .nf |
| \f3 \-> java\&.util compact1\fP |
| .fi |
| .nf |
| \f3 \-> java\&.util\&.logging compact1\fP |
| .fi |
| .nf |
| \f3 \-> javax\&.swing Full JRE\fP |
| .fi |
| .nf |
| \f3 \-> javax\&.swing\&.border Full JRE\fP |
| .fi |
| .nf |
| \f3 \-> javax\&.swing\&.event Full JRE\fP |
| .fi |
| .nf |
| \f3 \-> javax\&.swing\&.text Full JRE\fP |
| .fi |
| .nf |
| \f3 \-> javax\&.swing\&.tree Full JRE\fP |
| .fi |
| .nf |
| \f3 \-> javax\&.swing\&.undo Full JRE\fP |
| .fi |
| .nf |
| \f3\fP |
| .fi |
| .sp |
| Analyzing the immediate dependencies of a specific class in a given classpath, for example the \f3com\&.sun\&.tools\&.jdeps\&.Main\fR class in the tools\&.jar file\&. |
| .sp |
| .nf |
| \f3$ jdeps \-cp lib/tools\&.jar com\&.sun\&.tools\&.jdeps\&.Main\fP |
| .fi |
| .nf |
| \f3lib/tools\&.jar \-> /usr/java/jre/lib/rt\&.jar\fP |
| .fi |
| .nf |
| \f3 com\&.sun\&.tools\&.jdeps (tools\&.jar)\fP |
| .fi |
| .nf |
| \f3 \-> java\&.io \fP |
| .fi |
| .nf |
| \f3 \-> java\&.lang \fP |
| .fi |
| .nf |
| \f3\fP |
| .fi |
| .sp |
| Use the \f3-verbose:class\fR option to find class-level dependencies or use the \f3-v\fR or \f3-verbose\fR option to include dependencies from the same JAR file\&. |
| .sp |
| .nf |
| \f3$ jdeps \-verbose:class \-cp lib/tools\&.jar com\&.sun\&.tools\&.jdeps\&.Main\fP |
| .fi |
| .nf |
| \f3\fP |
| .fi |
| .nf |
| \f3lib/tools\&.jar \-> /usr/java/jre/lib/rt\&.jar\fP |
| .fi |
| .nf |
| \f3 com\&.sun\&.tools\&.jdeps\&.Main (tools\&.jar)\fP |
| .fi |
| .nf |
| \f3 \-> java\&.io\&.PrintWriter \fP |
| .fi |
| .nf |
| \f3 \-> java\&.lang\&.Exception \fP |
| .fi |
| .nf |
| \f3 \-> java\&.lang\&.Object \fP |
| .fi |
| .nf |
| \f3 \-> java\&.lang\&.String \fP |
| .fi |
| .nf |
| \f3 \-> java\&.lang\&.System \fP |
| .fi |
| .nf |
| \f3\fP |
| .fi |
| .sp |
| Use the \f3-R\fR or \f3-recursive\fR option to analyze the transitive dependencies of the \f3com\&.sun\&.tools\&.jdeps\&.Main\fR class\&. |
| .sp |
| .nf |
| \f3$ jdeps \-R \-cp lib/tools\&.jar com\&.sun\&.tools\&.jdeps\&.Main\fP |
| .fi |
| .nf |
| \f3lib/tools\&.jar \-> /usr/java/jre/lib/rt\&.jar\fP |
| .fi |
| .nf |
| \f3 com\&.sun\&.tools\&.classfile (tools\&.jar)\fP |
| .fi |
| .nf |
| \f3 \-> java\&.io \fP |
| .fi |
| .nf |
| \f3 \-> java\&.lang \fP |
| .fi |
| .nf |
| \f3 \-> java\&.lang\&.reflect \fP |
| .fi |
| .nf |
| \f3 \-> java\&.nio\&.charset \fP |
| .fi |
| .nf |
| \f3 \-> java\&.nio\&.file \fP |
| .fi |
| .nf |
| \f3 \-> java\&.util \fP |
| .fi |
| .nf |
| \f3 \-> java\&.util\&.regex \fP |
| .fi |
| .nf |
| \f3 com\&.sun\&.tools\&.jdeps (tools\&.jar)\fP |
| .fi |
| .nf |
| \f3 \-> java\&.io \fP |
| .fi |
| .nf |
| \f3 \-> java\&.lang \fP |
| .fi |
| .nf |
| \f3 \-> java\&.nio\&.file \fP |
| .fi |
| .nf |
| \f3 \-> java\&.nio\&.file\&.attribute \fP |
| .fi |
| .nf |
| \f3 \-> java\&.text \fP |
| .fi |
| .nf |
| \f3 \-> java\&.util \fP |
| .fi |
| .nf |
| \f3 \-> java\&.util\&.jar \fP |
| .fi |
| .nf |
| \f3 \-> java\&.util\&.regex \fP |
| .fi |
| .nf |
| \f3 \-> java\&.util\&.zip \fP |
| .fi |
| .nf |
| \f3/usr/java/jre/lib/jce\&.jar \-> /usr/java/jre/lib/rt\&.jar\fP |
| .fi |
| .nf |
| \f3 javax\&.crypto (jce\&.jar)\fP |
| .fi |
| .nf |
| \f3 \-> java\&.io \fP |
| .fi |
| .nf |
| \f3 \-> java\&.lang \fP |
| .fi |
| .nf |
| \f3 \-> java\&.lang\&.reflect \fP |
| .fi |
| .nf |
| \f3 \-> java\&.net \fP |
| .fi |
| .nf |
| \f3 \-> java\&.nio \fP |
| .fi |
| .nf |
| \f3 \-> java\&.security \fP |
| .fi |
| .nf |
| \f3 \-> java\&.security\&.cert \fP |
| .fi |
| .nf |
| \f3 \-> java\&.security\&.spec \fP |
| .fi |
| .nf |
| \f3 \-> java\&.util \fP |
| .fi |
| .nf |
| \f3 \-> java\&.util\&.concurrent \fP |
| .fi |
| .nf |
| \f3 \-> java\&.util\&.jar \fP |
| .fi |
| .nf |
| \f3 \-> java\&.util\&.regex \fP |
| .fi |
| .nf |
| \f3 \-> java\&.util\&.zip \fP |
| .fi |
| .nf |
| \f3 \-> javax\&.security\&.auth \fP |
| .fi |
| .nf |
| \f3 \-> sun\&.security\&.jca JDK internal API (rt\&.jar)\fP |
| .fi |
| .nf |
| \f3 \-> sun\&.security\&.util JDK internal API (rt\&.jar)\fP |
| .fi |
| .nf |
| \f3 javax\&.crypto\&.spec (jce\&.jar)\fP |
| .fi |
| .nf |
| \f3 \-> java\&.lang \fP |
| .fi |
| .nf |
| \f3 \-> java\&.security\&.spec \fP |
| .fi |
| .nf |
| \f3 \-> java\&.util \fP |
| .fi |
| .nf |
| \f3/usr/java/jre/lib/rt\&.jar \-> /usr/java/jre/lib/jce\&.jar\fP |
| .fi |
| .nf |
| \f3 java\&.security (rt\&.jar)\fP |
| .fi |
| .nf |
| \f3 \-> javax\&.crypto\fP |
| .fi |
| .nf |
| \f3\fP |
| .fi |
| .sp |
| Generate dot files of the dependencies of Notepad demo\&. |
| .sp |
| .nf |
| \f3$ jdeps \-dotoutput dot demo/jfc/Notepad/Notepad\&.jar\fP |
| .fi |
| .nf |
| \f3\fP |
| .fi |
| .sp |
| \f3jdeps\fR will create one dot file for each given JAR file named <\fIfilename\fR>\&.dot in the dot directory specified in the \f3-dotoutput\fR option, and also a summary file named summary\&.dot that will list the dependencies among the JAR files |
| .sp |
| .nf |
| \f3$ cat dot/Notepad\&.jar\&.dot \fP |
| .fi |
| .nf |
| \f3digraph "Notepad\&.jar" {\fP |
| .fi |
| .nf |
| \f3 // Path: demo/jfc/Notepad/Notepad\&.jar\fP |
| .fi |
| .nf |
| \f3 "<unnamed>" \-> "java\&.awt";\fP |
| .fi |
| .nf |
| \f3 "<unnamed>" \-> "java\&.awt\&.event";\fP |
| .fi |
| .nf |
| \f3 "<unnamed>" \-> "java\&.beans";\fP |
| .fi |
| .nf |
| \f3 "<unnamed>" \-> "java\&.io";\fP |
| .fi |
| .nf |
| \f3 "<unnamed>" \-> "java\&.lang";\fP |
| .fi |
| .nf |
| \f3 "<unnamed>" \-> "java\&.net";\fP |
| .fi |
| .nf |
| \f3 "<unnamed>" \-> "java\&.util";\fP |
| .fi |
| .nf |
| \f3 "<unnamed>" \-> "java\&.util\&.logging";\fP |
| .fi |
| .nf |
| \f3 "<unnamed>" \-> "javax\&.swing";\fP |
| .fi |
| .nf |
| \f3 "<unnamed>" \-> "javax\&.swing\&.border";\fP |
| .fi |
| .nf |
| \f3 "<unnamed>" \-> "javax\&.swing\&.event";\fP |
| .fi |
| .nf |
| \f3 "<unnamed>" \-> "javax\&.swing\&.text";\fP |
| .fi |
| .nf |
| \f3 "<unnamed>" \-> "javax\&.swing\&.tree";\fP |
| .fi |
| .nf |
| \f3 "<unnamed>" \-> "javax\&.swing\&.undo";\fP |
| .fi |
| .nf |
| \f3}\fP |
| .fi |
| .nf |
| \f3\fP |
| .fi |
| .nf |
| \f3$ cat dot/summary\&.dot\fP |
| .fi |
| .nf |
| \f3digraph "summary" {\fP |
| .fi |
| .nf |
| \f3 "Notepad\&.jar" \-> "rt\&.jar";\fP |
| .fi |
| .nf |
| \f3}\fP |
| .fi |
| .nf |
| \f3\fP |
| .fi |
| .sp |
| .SH SEE\ ALSO |
| .TP 0.2i |
| \(bu |
| javap(1) |
| .RE |
| .br |
| 'pl 8.5i |
| 'bp |