2017-03-17 79 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路径添加到清单文件中,它将在我们将要测试的每个位置处可用。最有可能的是,库被加载到自举类加载器中我不确定。 你可以参考上面提到的网站了解更多细节..它的阐述非常恰当 –