7

callme.jar という名前の jar ファイルがあるとします。

いくつかのディレクトリにあり、

それらのどれが実行時に使用されているかを分析する方法は?

4

5 に答える 5

30

引数を指定javaして実行可能ファイルを呼び出します。-verbose:classこれにより、次のような出力が生成されます。

[ファイルから org.apache.log4j.helpers.ThreadLocalMap をロード:/C:/.../1.2.14/log4j-1.2.14.jar]
[ファイルから org.apache.commons.cli.Option をロード:/C :/.../commons-cli-1.2.jar]

于 2009-06-04T13:41:31.547 に答える
3

最も簡単な方法ではないかもしれませんが、プロセスが開いているファイルを調べて、そこから判断することができます。

Windows を使用している場合は、Process Explorerを使用して、プロセスが開いているファイルをいつでも確認したり、Process Monitorを使用して実行中のファイルシステム アクセスを監視したりできます。多くのノイズが発生しますが、そこから理解できます。

Mac を使用している場合は、組み込みのアクティビティ モニターで開いているファイルの一覧を表示できると思います。残念ながら、Linux で使用するコマンドがわかりません。

于 2009-06-04T13:40:09.710 に答える
2
System.getProperty("java.class.path");
于 2009-06-04T13:46:45.623 に答える
1

このコードを試してください:

    //Get the System Classloader
    ClassLoader sysClassLoader = ClassLoader.getSystemClassLoader();

    //Get the URLs
    URL[] urls = ((URLClassLoader)sysClassLoader).getURLs();
    System.out.println("CURRENT CLASSPATH :");
    for(int i=0; i< urls.length; i++){
        System.out.println(urls[i].getFile());
    }       
    System.out.println("END OF CLASSPATH");
于 2009-06-04T13:41:44.793 に答える
0

JAR からのコードの一部が使用されているかどうかを知ることは、その jar を呼び出すコードが実行されている (つまり、カバーされている) 場合にのみ可能です。コードがカバーされていない時点まで、アプリケーション クラス パスの jar が使用されているかどうかを知ることは困難です。

このためには、コード全体をカバーできる適切な junit テスト ケースを正しく設定する必要がある場合があります。その後、Class Dependency Analyzer ツールを使用できます。

それは一種の試してみるものです。JAR を 1 つずつ削除して、アプリケーションが機能するかどうかを確認できますが、この検査を行うには junit ケースが最適なオプションです。

于 2016-01-12T07:18:27.583 に答える