我编写了一个简单的javaagent,它基本上使用javax/imageio/spi/ServiceRegistry
在JDK的一些类中注入一些日志记录,例如javassist
。
它在一个简单的独立应用程序中运行良好,但我无法在WildFly 10中使用它。我尝试过:
module.xml
声明为<module name="org.javassist"/>
作为依赖org.javassist
附加到JBOSS_MODULES_SYSTEM_PKGS
-javaagent:/full/path/to/agent/jar/in/module
至JAVA_OPTS
WildFly启动但在server.log中我得到:
java.lang.NoClassDefFoundError: javassist/ClassPool
at net.luniks.agent.LoggerChanger.transform(LoggerChanger.java:48)
at sun.instrument.TransformerManager.transform(TransformerManager.java:188)
at sun.instrument.InstrumentationImpl.transform(InstrumentationImpl.java:428)
at java.lang.ClassLoader.findBootstrapClass(Native Method)
at java.lang.ClassLoader.findBootstrapClassOrNull(ClassLoader.java:1015)
at java.lang.ClassLoader.loadClass(ClassLoader.java:413)
at java.lang.ClassLoader.loadClass(ClassLoader.java:411)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:348)
at org.jboss.modules.ClassLoaderLocalLoader.loadClassLocal(ClassLoaderLocalLoader.java:74)
at org.jboss.modules.Module.loadModuleClass(Module.java:606)
at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:190)
似乎使用了模块类加载器,但即使代理模块依赖于org.javassist
,它仍然无法加载其类。
我错过了什么?
答案 0 :(得分:0)
最终我通过将代理程序包添加到JBOSS_MODULES_SYSTEM_PKGS
(而不是&#34; javassist&#34;)并将org.javassist
模块JAR添加到引导类路径来实现它:< / p>
JAVA_OPTS="$JAVA_OPTS -Xbootclasspath/p:/path/to/wildfly/modules/system/layers/base/org/javassist/main/javassist-3.18.1-GA.jar"
现在代理可以工作,它可以加载Javassist类。当然不是干净的方式,但它仅用于调试目的......