我正在尝试使用java.lang.instrument API向java.lang.Object构造函数添加静态方法调用。我知道我有正确的基础知识,因为如果我将方法调用System.gc(),它就可以工作。我通过运行带有和不带仪器的-verbosegc验证了这一点。如果我在自己的包中将方法调用更改为静态类/方法,则会出现致命错误:
本机方法中线程“main”FATAL ERROR中的异常:-javaagent的处理失败
在工作目录中没有创建转储文件,所以我发现很难弄清楚是什么问题。其他信息:
提前致谢。
答案 0 :(得分:1)
是的,正如@barry在评论中指出的那样,您必须在Java Agent中添加Boot-Class-Path
定义。对我来说,我在代理中使用了javassist来创建字节码,所以我的清单看起来像这样:
Manifest-Version: 1.0
Premain-Class: com.company.agent.Agent
Agent-Class: com.company.agent.Agent
Boot-Class-Path: javassist-3.18.2-GA.jar agent.jar
我将所有应用程序的jar文件放在与javassist和agent jar相同的lib目录中。对于类路径中的所有内容,在同一文件夹中,它可以正常工作。