簡體   English   中英

如何發現哪個類路徑條目提供了類?

[英]How do I discover which classpath entry provided a class?

我從Java中的自定義類加載器中加載了來自幾個不同.jars的幾個不同的類。 我創建一個自定義URLClassLoader ,向它添加幾個.jars並將其傳遞給ServiceLoader以查找我想要的類。

我的問題是:給定一個類,有沒有辦法發現它是從哪個.jar加載的?

以下代碼段應該有效:

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

請注意,在調用getProtectionDomain或getCodeSource並在任何生產代碼中正確處理時,應添加null檢查。 (這取決於類加載器,安全性等)

嘗試設置參數

-verbose:class

當使用java運行你的jar /類時,它將為你提供它加載的類及其來源的完整綱要,例如:

[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]

這應該給你所有你需要知道的東西,找到你想要的類/罐。

您可以在Classloader上調用findResource,並解析您獲取的URL以確定其來源。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM