パッケージ/クラスレベルの依存関係を調べる (jdeps)
JDK 8 に付属している jdeps コマンド を使用すると、JAR ファイル(.class ファイル)から、パッケージレベル、あるいは、クラスレベルの依存関係を調べることができます。
パッケージレベルの依存関係を調べる
あるパッケージへの依存のみを抽出したい場合は、-e
オプションで次のように指定します。
☝️ ワンポイント
特定のパッケージへの依存は、
-p
オプションでも検索することができますが、
こちらの場合は、完全にパッケージ名が一致するもののみを抽出します。
あるパッケージより下位のパッケージも含めて検索するには、上記のように -e
オプションで正規表現の形でパッケージ名を指定する必要があります。クラスレベルの依存関係を調べる
$ jdeps -verbose:class app.jar
メソッドレベルの依存関係を調べる (cfa)
YaSuenag さんの作成している cfa
(Class File Analyzer) というツールを使用すると、.class
ファイルを解析して、メソッドレベルの依存関係を調べることができます。
https://github.com/YaSuenag/cfa/(fork しておく)
実行ファイルは cfa.jar
です。
Windows であれば、下記のようなバッチファイルを JAR と同じディレクトリにおいて PATH を通しておくと、どのディレクトリからでも cfa
と入力するだけで実行できて便利です。
cfa.jar
は、JRE ではなく JDK に付属している java コマンド経由で実行する必要があることに注意してください。
実行時に下記のようなエラーが発生する場合は、JRE の java コマンドを参照してしまっている可能性が高いです。
Exception in thread "main" java.io.FileNotFoundException: tools.jar does not exist.
このような場合は、JDK_HOME
環境変数に JDK をインストールしたディレクトリパス(例: C:\jdk1.8.0_65
)を設定してください。
上記のバッチファイルでは、この環境変数で設定された JDK の java コマンドを参照するようになっています。
下記は cfa
コマンドの使用例です。