2017-03-17 45 views
0

我想用一個庫方法來調用我的Class中的一個javassist代理。Javassist java.lang.NoClassDefFoundError

可以說我有一個類:

Class A { 

    void display() { 
     System.out.println("Inside A.dipslay()"); 
    } 
} 

然後當我調用:

method.insertAfter("packageName.A.display()"); 

它拋出異常:

Exception in thread "main" java.lang.NoClassDefFoundError: packageName/A 
    at java.net.HttpURLConnection.setRequestMethod(libraryClass) 
    at sun.net.www.protocol.http.HttpURLConnection.setRequestMethod(libraryClass) 
    at com.avekshaa.app.SecurityFilter.sendGet(Class where i call the Library Class) 
    at com.avekshaa.app.SecurityFilter.main(Class where i call the Library Class) 

當我的名字只是把它:

method.insertAfter("A.display()"); 

然後它給出一個沒有這樣的類發現異常。

+0

我通過在清單文件中添加jars路徑解決了這個問題 –

回答

1

我通過在javassist清單文件中添加jars路徑解決了該問題。 Reffer - this

+0

請您詳細說明如何解決此問題? – Ori

+0

是的。實際上,代理類將被加載到System類加載器中,並且庫類將被加載到不同的位置。所以我們必須使我們的代理在其他庫所在的位置可用。一旦我們將我們的jar路徑添加到清單文件中,它將在我們將要測試的每個位置處可用。最有可能的是,庫被加載到自舉類加載器中我不確定。 你可以參考上面提到的網站了解更多細節..它的闡述非常恰當 –