web-dev-qa-db-fra.com

Java 7 JVM VerifyError dans Eclipse

Lorsque je compile mon projet dans Eclipse Indigo à l'aide de JDK 7, j'obtiens la boîte de dialogue d'erreur suivante

enter image description here

avec le stacktrace suivant

Exception in thread "main" Java.lang.VerifyError: Expecting a stackmap frame at branch target 32 in method ... at offset 0
    at Java.lang.Class.getDeclaredMethods0(Native Method)
    at Java.lang.Class.privateGetDeclaredMethods(Unknown Source)
    at Java.lang.Class.getMethod0(Unknown Source)
    at Java.lang.Class.getMethod(Unknown Source)
    at Sun.launcher.LauncherHelper.getMainMethod(Unknown Source)
    at Sun.launcher.LauncherHelper.checkAndLoadMain(Unknown Source)

J'ai trouvé un bogue pertinent ici et utilisé la solution de contournement suggérée en utilisant l'option jvm -XX:-UseSplitVerifier et bien que cela fonctionne, ce bogue me confond toujours.

Est-ce que quelqu'un sait pourquoi cela se produit et pourquoi la solution de contournement ... fonctionne?

--Remarque--

Le projet se compile très bien en utilisant JDK 6.

33
mre

Bogue 353467 parle de "l'utilisation de -XX:-UseSplitVerifier pour activer l'ancien vérificateur ".
Cela est conforme au JDK TM 6 Adoption Guide qui décrit cette option comme:

Le vérificateur traditionnel peut être forcé avec le -XX:-UseSplitVerifier drapeau.

Attributs StackMapTable manquants ou incorrects pour la version 50.0 les fichiers de classe peuvent entraîner des exceptions VerifyError.
Outils qui réécrivent le bytecode dans la version 50.0 les fichiers de classe et ne mettent pas correctement à jour le StackMapTable peuvent échouer à vérifier et déclencher des exceptions.

Ainsi, le commentaire du 03/10/2011 indique que:

AspectJ active désormais automatiquement le paramètre précédemment facultatif pour créer des stackmaps si les classes sont Java7.

27
VonC

Lorsque j'ai eu ce problème, je l'ai résolu en supprimant mes bibliothèques système JDK 1.7 du projet et j'ai ajouté les bibliothèques JDK 1.6 à la place. Je suis allé réexécuter le projet et je n'ai pas eu l'erreur. Lorsque j'ai ajouté à nouveau les bibliothèques JDK 1.7, cela fonctionne toujours, donc quelque chose dans le "swapping" le fait fonctionner.

1
pauwel

J'ai rencontré ce problème dans Juno, mais je l'ai résolu en installant la dernière version 4.2 à partir du site de mise à jour 4.2 ici:

http://www.Eclipse.org/ajdt/downloads/

C'est le même que celui donné par @VonC il y a un an - mais puisque l'AspectJ mis à jour est là maintenant (mais pas dans le dernier dépôt Juno ni avec ce qui est livré avec Spring), il constitue maintenant une réponse.

Mais crédit à @VonC.

Notez que cela devrait fonctionner pour les versions 3.8 et 4.2.

0
Bob Kerns

actuellement, mon environnement est jdk 1.7 (j2sdk 1.7 update 21) avec Eclipse 4.2 juno (SR2) J'ai eu le même problème, donc je l'avais résolu qui configurait VM arguments Option '-XX: -UseSplitVerifier "mais il s'est produit de gros problèmes lorsque je déploierai un produit basé sur google-app-engine.

enfin j'ai changé Java 6 (mise à jour 43)

0
SMJ