2010-02-15 5 views
10

Quando si tenta di eseguire un programma Java (java -javaagent:size.jar ObjectSizeTest) ottengo il seguente errore:"Impossibile caricare attributo manifesta premain-Class" durante il tentativo di ottenere la dimensione di un oggetto utilizzando agente 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 

Qui è il codice di ObjectSizeTest:

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

MANIFEST.MF (per size.jar):

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

Premain-Class: ObjectSizeFetcher 

e qui è O codice 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

Si ottiene il seguente errore ... e ...? (Non hai fatto una domanda.) – JasCav

+0

dove sono le fonti per size.jar? Credo che abbiamo bisogno di quelli. – rochb

+0

Puoi pubblicare il file manifest, penso che la tua classe Premain nel file manifest non sia pienamente qualificata o non sia in grado di trovare quella classe. –

risposta

5

Assicurarsi di avere fornito il percorso java completo della classe contenente il metodo pre-principale. per esempio come questo org.eclipse.anotherpckg.ObjectSizeFetcher. In secondo luogo, deve esserci uno spazio prima del nome e il ritorno a capo alla fine. ad esempio

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

L'ultima riga è dovuta al ritorno a capo.

+1

Non è visibile in questo frammento, ma la nuova riga alla fine del file è effettivamente necessaria. –

0

Si tratta di un problema con il comando jar stesso. il comando jar deve essere utilizzato con gli attributi cfm, per includere MANIFEST.MF personalizzato, altrimenti jar creerà un file e inserirà il proprio contenuto che non include l'attributo PreMain-Class come menzionato nel file manifest.mf personalizzato.

1

Si dovrebbe aggiungere in MANIFEST.MF:

Premain-Class: org.your.package.ObjectSizeFetcher + nuova linea

invece

Premain-Class: ObjectSizeFetcher

Problemi correlati