"Не удалось загрузить атрибут манифеста Premain-Class" при попытке получить размер объекта с помощью java-агента
Когда я пытаюсь запустить java-программу (java -javaagent:size.jar ObjectSizeTest
), я получаю следующую ошибку:
Failed to load Premain-Class manifest attribute from D:\workspace\ObjectSizeTest\size.jar
Error occurred during initialization of VM
agent library failed to init: instrument
Вот код ObjectSizeTest:
public class ObjectSizeTest {
public static void main(String[] args) {
String s = new String("sai");
System.out.println(ObjectSizeFetcher.getObjectSize(s));
}
}
MANIFEST.MF(для size.jar):
Manifest-Version: 1.0
Created-By: 1.5.0_18 (Sun Microsystems Inc.)
Premain-Class: ObjectSizeFetcher
и вот код ObjectSizeFetcher:
import java.lang.instrument.Instrumentation;
public class ObjectSizeFetcher {
private static Instrumentation instrumentation;
public static void premain(String args, Instrumentation inst) {
instrumentation = inst;
}
public static long getObjectSize(Object o) {
return instrumentation.getObjectSize(o);
}
}
Ответы
Ответ 1
Убедитесь, что вы предоставили полный путь java класса, содержащего основной метод.
например, например, org.eclipse.anotherpckg.ObjectSizeFetcher. Во-вторых, должно быть пространство перед именем и возвратом каретки в конце. например
Manifest-Version: 1.0
Created-By: 1.5.0_18 (Sun Microsystems Inc.)
Premain-Class: org.eclipse.package.ObjectSizeFetcher
Последняя строка связана с возвратом каретки.
Ответ 2
Это проблема с самой командой jar. Команда jar должна использоваться с атрибутами cfm, чтобы включить настраиваемый MANIFEST.MF, иначе jar создаст один файл и добавит его собственное содержимое, которое не включает атрибут PreMain-Class, как мы упомянем в настроенном файле manifest.mf.
Ответ 3
Вы должны добавить в MANIFEST.MF:
Premain-Class: org.your.package.ObjectSizeFetcher
+ новая строка
insted
Premain-Class: ObjectSizeFetcher
Ответ 4
просто запустите java size.jar ObjectSizeTest
проблема вызвана агентом java, который имеет класс трансформера.