gpt4 book ai didi

javassist 与 Glassfish - javassist.NotFoundException - springframework 中的检测类失败

转载 作者:行者123 更新时间:2023-12-01 16:39:24 25 4
gpt4 key购买 nike

当使用 javassist 检测 com.sun.net.* 类时,我可以成功使用 .insertAfter 方法。但是,当尝试从 Glassfish 中运行的应用程序检测第三方类时,我收到错误:

Failed instrumenting com.app.class

agent.internal.javassist.CannotCompileException: cannot find org.springframework.class

所以看起来javaagent能够获取类的字节码,但无法编译它,因为检测方法(来自org.springframework)的某些依赖项无法被编译找到了。

最佳答案

这是一种不寻常的行为,因为人们会期望 javassist 简单地将字节码附加到检测的方法中,而不必引用同一方法中引用的任何类。

我可以通过检查代理使用的 ClassPool 来调试问题:

ClassPool pool = new ClassPool();
pool.appendSystemPath();
CustomLogger.logText("Class pool: " + pool.toString());

结果:

Class pool: [class path: my.java.agent.Transformer.class:java.lang.Object.class:]

然后我们可以将缺少的库 *.jar 的确切路径(在将运行代理的计算机上!)插入到类池中:

pool.insertClassPath("/path/to/glassfish/modules/missing-module.jar");

结果是:

Class pool: [class path: file:/path/to/glassfish/modules/missing-module.jar:my.java.agent.Transformer.class:java.lang.Object.class:]

javassist 现在可以编译该类

关于javassist 与 Glassfish - javassist.NotFoundException - springframework 中的检测类失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61896496/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com