2010-02-15 9 views
10

Kiedy próbuję uruchomić program Java (java -javaagent:size.jar ObjectSizeTest) pojawia się następujący błąd:„Nie udało się załadować atrybut oczywistego Premain-Class”, starając się uzyskać rozmiaru obiektu przy użyciu agenta java

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 

Tutaj jest ObjectSizeTest Kod:

public class ObjectSizeTest { 
    public static void main(String[] args) { 
     String s = new String("sai"); 
     System.out.println(ObjectSizeFetcher.getObjectSize(s)); 
    } 
} 

MANIFEST.MF (dla size.jar):

Manifest-Version: 1.0 
Created-By: 1.5.0_18 (Sun Microsystems Inc.) 

Premain-Class: ObjectSizeFetcher 

i tutaj jest o Kod bjectSizeFetcher:

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); 
    } 
} 
+0

uzyskać następujący błąd ... i ...? (Nie zadałeś pytania.) – JasCav

+0

gdzie są źródła pliku size.jar? Chyba ich potrzebujemy. – rochb

+0

Czy możesz opublikować plik manifestu, myślę, że Twoja klasa Premain w pliku manifestu nie jest w pełni kwalifikowana lub nie może znaleźć tej klasy. –

Odpowiedz

5

Upewnij się, że podałeś pełną ścieżkę javy dla klasy zawierającej metodę przed główną. na przykład taki jak ten org.eclipse.anotherpckg.ObjectSizeFetcher. Po drugie musi być miejsce przed nazwiskiem i powrotem karetki na końcu. na przykład:

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

Ostatnia linia wynika z powrotu karetki.

+1

Nie jest to widoczne w tym fragmencie, ale niezbędna jest nowa linia na końcu pliku. –

0

Jest to problem związany z samą komendą jar. Polecenie jar musi być używane z atrybutami cfm, aby uwzględnić niestandardowy MANIFEST.MF, w przeciwnym razie jar utworzy jeden plik i wstawi własną zawartość, która nie zawiera atrybutu klasy PreMain, o czym wspomnieliśmy w dostosowanym pliku manifest.mf.

1

Należy dodać w MANIFEST.MF:

Premain-Class: org.your.package.ObjectSizeFetcher + nowa linia

insted

Premain-Class: ObjectSizeFetcher

Powiązane problemy