【发布时间】:2016-02-17 06:02:43
【问题描述】:
我目前正在尝试使用 Java Instrumentation,我什至无法使用 -javaagent arg 启动 JVM 并获得 ClassNotFoundException。
我有一个名为 TestInstrumentation 的简单测试项目。它有一个 src 文件夹,其中包含一个名为 testinstrumentation 的包。里面是:TestInstrumentation.java 和 TestAgent.jar。
这是我的 TestAgent.jar 的 manifest.mf 的内容:
Manifest-Version: 1.0
Premain-Class: TestAgent
Created-By: 1.8.0_45 (Oracle Corporation)
TestAgent.java:
package testinstrumentation;
import java.lang.instrument.Instrumentation;
public class TestAgent {
public static void premain(String agentArgument, Instrumentation instrument) {
System.out.println("Java Agent Loaded!");
}
}
TestInstrumentation.java:
package testinstrumentation;
public class TestInstrumentation {
public static void main(String[] args) {
System.out.println("Main Class");
}
}
这是我尝试运行时的堆栈跟踪:
java.lang.ClassNotFoundException: TestAgent
FATAL ERROR in native method: processing of -javaagent failed
at java.net.URLClassLoader$1.run(URLClassLoader.java:372)
at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:360)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at sun.instrument.InstrumentationImpl.loadClassAndStartAgent(InstrumentationImpl.java:304)
at sun.instrument.InstrumentationImpl.loadClassAndCallPremain(InstrumentationImpl.java:401)
Exception in thread "main" Java Result: 1
我很确定错误出现在我的 jar 的 manifest.mf 中的 Premain 类规范中。任何有关如何纠正此问题的建议都将不胜感激!
【问题讨论】:
-
无需详细说明:您的错误消息提到了一个类
src.testinstrumentation.TestAgent(注意附加的 src),而您向我们展示了一个类testinstrumentation.TestAgent。 -
已编辑。正在玩清单中的行并忘记将其改回。仍然得到同样的错误,只是使用“TestAgent”作为未找到的类
标签: java instrumentation agent