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