【问题标题】:Javassist java.lang.NoClassDefFoundErrorJavassist java.lang.NoClassDefFoundError
【发布时间】:2017-03-17 10:16:20
【问题描述】:

我想检测一个库方法来调用我在 javassist 代理中存在的一个类。

假设我有一堂课:

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()");

然后它给出一个 No such class found Exception。

【问题讨论】:

  • 我通过在清单文件中添加 jars 路径解决了这个问题

标签: java instrumentation javassist


【解决方案1】:

我通过在 javassist 清单文件中添加 jars 路径解决了这个问题。 参考 - this

【讨论】:

  • 您能否详细说明如何解决此问题?
  • 是的。实际上,代理类将在系统类加载器中加载,而库类将在不同的位置加载。所以我们必须让我们的代理在其他库所在的位置可用。一旦我们在清单文件中添加我们的 jar 路径,它将在我们将检测的每个位置都可用。很可能这些库是在引导类加载器中加载的我不确定。您可以参考上述网站了解更多详细信息。它的阐述非常恰当
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-06
  • 1970-01-01
相关资源
最近更新 更多