2016-05-16 159 views
0

我想分析一個java項目的代碼。 我有一個jar文件,我使用insertClassPath函數添加到javassist路徑中進行分析。如果我嘗試從項目中訪問一個類,一切正常。 問題是我還需要訪問項目使用的庫中的類。用javassist加載庫jar

我試圖將庫添加到類路徑中,就像我使用項目jar一樣,但是我得到一個NotFoundException,所以我想我沒有給出正確的路徑。

的代碼看起來是這樣的:

String jarFileName = "C:/Users/diana/Desktop/Test/ckjm.jar"; 
ClassPool pool = ClassPool.getDefault(); 
    try{ 
     pool.insertClassPath(jarFileName); 
     pool.insertClassPath("C:/Users/diana/Desktop/Test/ckjm/lib/bcel-5.2.jar"); 
    } catch (NotFoundException e) { 
     System.out.println("error loading jar!!"); 
    } 

我用harcoded字符串只是用於測試目的。該jar文件位於lib文件夾或歸檔到jar中的項目中。 我不知道如何添加另一個jar中包含的jar。

注:如果我把圖書館作爲一個單獨的jar(並給予路徑,如:「C:/Users/diana/Desktop/Test/bcel-5.2.jar」),它炒菜罰款

任何幫助將不勝感激

回答

0

如果您的目標JAR位於另一個JAR中,則可以使用使用URLClassLoader創建的LoaderClassPath,該網址使用JAR的JarURLConnection URL路徑定義。

所以假設你有一個目標JAR,inner.jar,嵌入到另一個JAR,內部C:/Users/diana/outer.jar

我們假設它位於一個名爲lib的子目錄中。

外部JAR的URL將爲file:/ C:/Users/diana/outer.jar

內部JAR的URL將爲jar:file:/ C:/Users/diana/outer.jar!/lib/inner.jar

您的代碼加載了這個類路徑將是:

URL cpUrl = new URL("jar:file:/C:/Users/diana/outer.jar!/lib/inner.jar"); 
URLClassLoader cpUrlLoader = new URLClassLoader(new URL[]{cpUrl}); 
pool.insertClassPath(new LoaderClassPath(cpUrlLoader)); 
+0

我都試過,但我依然無法從罐子訪問類。 insertClassPath函數不會引發異常,但是當我嘗試使用pool.get(className)訪問類時,我得到NotFoundException –