«Не удалось загрузить атрибут манифеста Premain-Class» при попытке получить размер объекта с помощью агента Java - PullRequest
14 голосов
/ 15 февраля 2010

Когда я пытаюсь запустить программу 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);
    }
}

Ответы [ 4 ]

7 голосов
/ 01 сентября 2011

Убедитесь, что вы указали полный путь Java для класса, содержащего метод pre-main. например, как это org.eclipse.anotherpckg.ObjectSizeFetcher. Во-вторых, должно быть место перед именем и возвратом каретки в конце. например

Manifest-Version: 1.0
Created-By: 1.5.0_18 (Sun Microsystems Inc.)
Premain-Class: org.eclipse.package.ObjectSizeFetcher

Последняя строка связана с возвратом каретки.

1 голос
/ 04 июня 2016

Вы должны добавить в MANIFEST.MF:

Premain-Class: org.your.package.ObjectSizeFetcher + новая строка

insted

Premain-Class: ObjectSizeFetcher

1 голос
/ 07 февраля 2014

Это проблема самой команды jar. Команда jar должна использоваться с атрибутами cfm, чтобы включить настроенный файл MANIFEST.MF, иначе jar создаст один файл и вставит свое собственное содержимое, которое не включает атрибут PreMain-Class, как мы упоминаем в настраиваемом файле manifest.mf.

0 голосов
/ 15 мая 2019

просто запустите java size.jar ObjectSizeTest проблема вызвана тем, что у агента java есть класс трансформера.

...