2010-02-15 4 views
10

Lorsque je tente d'exécuter un programme java (java -javaagent:size.jar ObjectSizeTest) je reçois l'erreur suivante:« Impossible de charger l'attribut manifeste Premain-classe » tout en essayant d'obtenir la taille d'un objet en utilisant un agent 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 

ici est le code de ObjectSizeTest:

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

MANIFEST.MF (pour size.jar):

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

Premain-Class: ObjectSizeFetcher 

et ici est O Code de 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

Vous obtenez l'erreur suivante ... et ...? (Vous n'avez pas posé de question.) – JasCav

+0

où sont les sources de size.jar? Je suppose que nous en avons besoin. – rochb

+0

Pouvez-vous publier le fichier manifeste, je pense que votre Premain-Class dans le fichier manifeste n'est pas entièrement qualifié ou il est incapable de trouver cette classe. –

Répondre

5

Assurez-vous d'avoir indiqué le chemin Java complet de la classe contenant la méthode pré-principale. par exemple comme ceci org.eclipse.anotherpckg.ObjectSizeFetcher. Deuxièmement, il doit y avoir un espace avant le nom et le retour chariot à la fin. par exemple

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

La dernière ligne est due au retour chariot.

+1

Ce n'est pas visible dans cet extrait, mais une nouvelle ligne à la fin du fichier est en effet nécessaire. –

0

C'est un problème avec la commande jar elle-même. La commande jar doit être utilisée avec les attributs cfm, pour inclure MANIFEST.MF personnalisé, sinon jar créera un fichier et insérera son propre contenu qui n'inclut pas l'attribut PreMain-Class comme mentionné dans le fichier manifest.mf personnalisé.

1

Vous pouvez ajouter à MANIFEST.MF:

Premain-Class: org.your.package.ObjectSizeFetcher + nouvelle ligne

insted

Premain-Class: ObjectSizeFetcher

Questions connexes