java如何在清单中指定我的Premainclass。mf在使用javaagent启动JVM时
我目前正在尝试Java插装,甚至在用-javaagent arg启动JVM并获得ClassNotFoundException时都遇到了问题
我有一个简单的测试项目叫做TestInstrumentation。它有一个src文件夹,其中包含一个名为testinstrumentation的包。里面是:测试仪器。java和TestAgent。罐子
这是我遗嘱的内容。jar的舱单。mf:
Manifest-Version: 1.0
Premain-Class: TestAgent
Created-By: 1.8.0_45 (Oracle Corporation)
测试剂。爪哇:
package testinstrumentation;
import java.lang.instrument.Instrumentation;
public class TestAgent {
public static void premain(String agentArgument, Instrumentation instrument) {
System.out.println("Java Agent Loaded!");
}
}
测试仪器。爪哇:
package testinstrumentation;
public class TestInstrumentation {
public static void main(String[] args) {
System.out.println("Main Class");
}
}
下面是我尝试运行它时的stacktrace:
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
我很确定错误在清单中我对Premain类的说明中。我的罐子。如有任何关于如何纠正此错误的建议,将不胜感激
# 1 楼答案
这听起来更像是包装问题。 一般来说,你做得对:你必须在清单中指定以下内容
当然,测试仪器。TestAgent类文件应该位于同一个jar中。 从你的stacktrace中,我看到它在src中。testinstrumentation但是您的代码应该被放入testinstrumentation包中
我建议你阅读Not so secret java agents系列教程(4部分)。这很好地概述了java代理的功能
希望这有帮助