我尝试在某些所需类的每个方法中使用 javassist 注入(inject)方法调用语句。 该语句对应于 java-agent jar 中的一个类。例如,如果我的代理具有像 a.b.HelperClass 这样的类,我将注入(inject) a.b.HelperClass.call();在每个类(class)的开头使用 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 内的类吗? 顺便说一句,我通过调用代理主方法而不是 premain 来进行检测。
最佳答案
Eclipse 基于 OSGi,并具有强制执行的模块系统。
HelperClass 必须位于应使用它的 Eclipse 插件的类路径中。
关于检测 eclipse rcp 应用程序时出现 java.lang.ClassNotFoundException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56758946/