2013-11-15 119 views
0

我正在嘗試編寫一個簡單的代碼分析器,並且對於初學者,只是想創建一個類路徑爲單個jar文件的實例,其獨立於實際代碼分析器應用程序的類路徑。然後我想獲得所有條目的列表,但是在類路徑的上下文中使用反射來做一些基本的代碼分析並列出結果。是否有可能創建一個包含單個jar的ClassLoader?

是否有可能創建一個ClassLoader,其中包含一個可以使用反射進一步分析其清單的單個jar?

例如,創建一個自定義的加載:

String clspath = "/my/dir/myjar.jar"; 

URL clspathURL = null; 

try { 
    clspathURL = new URL("file:///" + clspath); 
} catch(MalformedURLException badURLex) { 

} 

然後做一些事情來列出所有它加載或者(如果它在初始化時加載所有可用的類,以它不知道)類,如果它不加載所有的類,加載它們

然後能夠使用反射進行內存代碼分析。

+2

我很困惑你的問題。 'ClassLoader'是一個類,它不包含任何JAR。 – m0skit0

+2

你看過URLClassLoader嗎? – Ingo

+0

URLClassLoader的作品。但可以列出其中包含的所有類嗎? – amphibient

回答

1

從罐子裏獲取文件列表和加載反射類是兩個獨立的東西。用於第一個ZipInputStream和第二任務URLClassLoader

URL jar = ...; 

ClassLoader cl = new URLClassLoader(new URL[]{jar}); 

ZipInputStream zip = new ZipInputStream(jar.openStream()); 
while(true) { 
    ZipEntry e = zip.getNextEntry(); 
    if (e == null) 
     break; 
    String nameAsInZip = e.getName(): 

    if(nameAsInZip.endsWith(".class")) { 

     String nameForClassLoader = ....; // transform name for CL 

     Class clazz = cl.loadClass(nameForClassLoader); 

     // analyze class 

    } 

} 
+0

是的。這就對了。你需要趕上'IOException',但沒關係...... – amphibient

+0

是的,你是對的。 – mwhs

相關問題