В настоящее время я пытаюсь экспериментировать с инструментами Java Instrumentation, и у меня возникают проблемы даже с запуском JVM с помощью -javaagent arg и получением ClassNotFoundException.Как я должен указать свой Premain-класс в manifest.mf при запуске JVM с помощью -javaagent
У меня есть простой тестовый проект под названием TestInstrumentation. Он имеет папку src с пакетом под названием testinstrumentation. Внутри: TestInstrumentation.java и TestAgent.jar.
Вот содержание manifest.mf моей TestAgent.jar в:
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");
}
}
Здесь вы 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 в манифесте.mf моей банки. Любые предложения относительно того, как я мог бы исправить это, были бы оценены!
Не вдаваясь в подробность: Ваше сообщение об ошибке упоминается класс 'src.testinstrumentation.TestAgent' (обратите внимание на дополнительных _src_), в то время как вы показали нам класс' testinstrumentation.TestAgent'. – Seelenvirtuose
Отредактировано. Играл с линией в манифесте и забыл изменить его. Все равно получите ту же ошибку, только с «TestAgent», поскольку класс не найден –