2010-08-09 42 views
2

我想找到一種方法來收集從jar文件加載的所有java.lang.Class的,但忽略源代碼本身的。轉儲java.lang.Class源自jar文件

我發現java.lang.instrument.Instrumentation接口,並認爲它可能會達到目的,但事實證明這並不完全....可用函數之一「getAllLoadedClasses」轉儲所有java.lang.Class的out(這是很好的),但它不僅轉儲從jar文件加載並從源文件加載。

是否有一個配置允許我們自定義設置,所以只有源自jar文件的java.lang.Class被傾倒或者有更好的解決方案?

我想在代碼表示中實現的內容如下所示。

java.lang.Class[] 
classesLoadedFromJars = getClassesLoadedFromJars(); 

for (java.lang.Class class : classesLoadedFromJars) { 
    // .............. 
} 

對這個建議有一兩個字會有幫助!

在此先感謝。

+2

什麼是你需要解決的問題? – 2010-08-09 17:23:19

+2

「從源代碼加載的類」是什麼意思? – dty 2010-08-09 17:24:56

+0

您正在使用'class'作爲變量名稱。你確定這個編譯? – mkadunc 2010-08-12 20:59:58

回答

1

該類的類加載器應該能夠爲您提供某個類從哪裏加載的線索。

ClassLoader loader = myClass.getClassLoader() 
if (loader instanceof URLClassLoader) { 
    URLClassLoader uLoader = (URLClassLoader)loader; 
    URL cURL = uLoader.getResource(myClass.getName().replace('.', '/')+".class"); 
} 

如果cURL開始與jar://,類起源於一個jar文件

+0

使用什麼功能? – Daniel 2010-08-12 15:58:53

+0

添加了一些示例代碼。看起來沒有更好的方法來做這件事,而不是讓classLoader手動定位.class文件 – mkadunc 2010-08-12 20:59:06