【问题标题】:java.lang.ClassNotFoundException while instrumenting eclipse rcp application检测 eclipse rcp 应用程序时出现 java.lang.ClassNotFoundException
【发布时间】:2019-11-07 13:57:12
【问题描述】:

我尝试在某些所需类的每个方法中使用 javassist 注入方法调用语句。 该语句对应于 java-agent jar 中的一个类。例如,如果我的代理有像 a.b.HelperClass 这样的类,我正在注入 a.b.HelperClass.call();在每个类的开头使用 javassist。

我尝试使用 Spring Boot Web 应用程序,代理工作正常,但使用 RCP 应用程序时它正在抛出

java.lang.ClassNotFoundException: a.b.HelperClass 在 org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:506) 在 org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:422) 在 org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:410) 在 org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:357)

我是否需要使用 eclipse 类加载器来加载位于 agent-jar 中的类? 顺便说一句,我通过调用 agent-main 方法而不是 premain 进行检测

【问题讨论】:

    标签: java classloader javassist javaagents bytecode-manipulation


    【解决方案1】:

    Eclipse 是基于 OSGi 的,并且有一个强制执行的模块系统。

    HelperClass 必须位于应该使用它的 Eclipse 插件的类路径中。

    【讨论】:

    • 还有其他方法吗?此外,instrumentation api 是否提供了某种侦听器,我可以在其中找到何时在哪个线程下调用特定方法(不使用调试器 api)?
    猜你喜欢
    • 2011-06-04
    • 1970-01-01
    • 1970-01-01
    • 2011-08-14
    • 1970-01-01
    • 2018-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多