メインクラスのJavaクラスの依存関係のリストを取得するにはどうすればよいですか?
-
03-07-2019 - |
質問
javaメインクラスのすべてのクラス依存関係を見つける方法はありますか?
メインクラスのインポートを手動でふるいにかけてインポートしましたが、同じパッケージ内のクラスをインポートする必要がないため、不完全なリストを作成していることに気付きました。
依存関係を再帰的に検索する(おそらく定義された深さまで)ものが必要です。
解決
javacだけで簡単に実行できます。クラスファイルを削除してから、メインクラスをコンパイルします。 javacは、必要なクラスを再帰的にコンパイルします(奇妙な名前のファイルにパッケージプライベートクラス/インターフェイスを隠さないことを条件とします)。もちろん、これは再帰的なハックをカバーしません。
他のヒント
Class Dependency Analyzer を見つけてダウンロードし、configureをインストールしてから10分後に完全なクラスの依存関係リスト。
intellijのアイデアには、気の利いた依存構造マトリックス。パッケージレベルとクラスレベルの依存関係を完全に探索できます。よりシンプルにしたい場合は、依存関係ビューアーも使用できますが、一次依存関係しか表示できません。
jdeps
コマンドラインツールをご覧ください:
https://docs.oracle.com /javase/8/docs/technotes/tools/unix/jdeps.html
jdeps -cp <your cp> -v <path to your .class file>
コマンドは、そのJavaクラスファイルの依存関係のリストを返します。コマンドで使用できる -regex
など、特定のパターンに一致する依存関係を見つけるための多くのオプションがあります
アプリケーションのすべての依存関係へのパスを出力するために、Javaのメインメソッドに挿入できるコードスニペットを次に示します。
ClassLoader cl = ClassLoader.getSystemClassLoader();
URL[] urls = ((URLClassLoader) cl).getURLs();
for(URL url: urls){
System.out.println(url.getPath());
}