2

Javaのカスタムクラスローダーからいくつかの異なる.jarからいくつかの異なるクラスをロードしています。カスタムを作成しURLClassLoader、それにいくつかの.jarを追加し、それをに渡して、必要なServiceLoaderクラスを見つけます。

私の質問は次のとおりです。クラスが与えられた場合、それがロードされた.jarを見つける方法はありますか?

4

3 に答える 3

5

次のスニペットが機能するはずです。

obj.getClass().getProtectionDomain().getCodeSource().getLocation().toString()

getProtectionDomain または getCodeSource を呼び出すときに null のチェックを追加し、運用コードで適切に処理する必要があることに注意してください。(クラスローダやセキュリティなどに依存します)

于 2009-07-06T03:23:59.220 に答える
3

パラメータを設定してみる

-verbose:class

javaを使用して jar/class を実行すると、読み込まれるクラスとその起源の完全な概要が表示されます。

[Opened /usr/java/j2sdk1.4.1/jre/lib/rt.jar]
[Opened /usr/java/j2sdk1.4.1/jre/lib/sunrsasign.jar]
[Opened /usr/java/j2sdk1.4.1/jre/lib/jsse.jar]
[Opened /usr/java/j2sdk1.4.1/jre/lib/jce.jar]
[Opened /usr/java/j2sdk1.4.1/jre/lib/charsets.jar]
[Loaded java.lang.Object from /usr/java/j2sdk1.4.1/jre/lib/rt.jar]
[Loaded java.io.Serializable from /usr/java/j2sdk1.4.1/jre/lib/rt.jar]

これで、必要なクラス/jar を見つけるために必要な情報がすべて得られるはずです。

于 2009-07-06T02:31:55.547 に答える
2

Classloader で findResource を呼び出し、取得した URL を解析して、それがどこから来ているかを把握できます。

于 2009-07-06T03:20:46.357 に答える