web-dev-qa-db-de.com

Java 1.8 ASM ClassReader konnte die Klassendatei nicht analysieren - wahrscheinlich aufgrund einer neuen Java Klassendateiversion, die noch nicht unterstützt wird

Meine Webanwendung läuft unter JDK 1.7 einwandfrei, stürzt jedoch unter 1.8 mit der folgenden Ausnahme ab (während des Starts des Anwendungsservers mit Jetty 8). Ich benutze die Spring-Version: 3.2.5.RELEASE.

Ausnahme:

org.springframework.core.NestedIOException: ASM ClassReader failed to parse class file - probably due to a new Java class file version that isn't supported yet

Ich gehe davon aus, dass das Problem aufgrund der spring- und "asm.jar" -Bibliothek auftritt, von der es abhängt.

Wie löse ich das?

77

Wie @prunge und @Pablo Lozano bereits sagten, benötigen Sie Spring 4, wenn Sie den Code für Java 8 (--target 1.8) kompilieren möchten, aber Sie können weiterhin Apps auf Java 8 ausführen auf Java 7, wenn Sie mit Spring 3.2.X arbeiten.

Check out http://docs.spring.io/spring/docs/current/spring-framework-reference/html/new-in-4.0.html

Beachten Sie, dass die Bytecode-Ebene Java 8 (-target 1.8, wie in -source 1.8 erforderlich) nur ab Spring Framework 4.0 vollständig unterstützt wird. Insbesondere Spring 3.2-basierte Anwendungen müssen mit maximal Java 7 als Ziel kompiliert werden, auch wenn sie zufällig auf einer Java 8-Laufzeitumgebung bereitgestellt werden. Aktualisieren Sie auf Spring 4 für Java 8-basierte Anwendungen.

110

Wenn dieser Fehler auftritt, auch wenn Sie mit -target 1.7 kompilieren, beachten Sie, dass dies auf einen Fehler in Spring Framework zurückzuführen ist, der dazu führt, dass der ASM-Klassenleser JDK-Klassen (Java. * Oder Javax. *) Lädt. kompiliert mit -target 1.8.

Dies kann in Kombination mit der alten ASM-Version ab Frühjahr 3.2.8, die das Parsen von 1.8-Klassendateien nicht unterstützt, ebenfalls zu diesem Fehler führen.

Weitere Informationen zu diesem Problem finden Sie hier: https://jira.spring.io/browse/SPR-11719

Dies sollte in Spring Framework Version 3.2.9 behoben werden, die in Kürze veröffentlicht werden soll.

Ein Upgrade auf Spring Framework 4 behebt natürlich auch das Problem, da es bereits eine neuere Version von ASM enthält.

Wenn Sie jedoch aus irgendeinem Grund noch kein Upgrade auf Version 4 durchführen können, ist es gut zu wissen, dass es (bald) eine Alternative gibt.

65
ItayK

Ich hatte das gleiche Problem und habe es gelöst. Ich verwende Spring 3.x mit Java 8. Wenn die obigen Lösungen nicht funktionieren, ändern Sie die Gläser und suchen Sie, ob diese Gläser mit der von Ihnen verwendeten Java) - Version kompatibel sind verwenden oder nicht. spring 3.x ist nicht kompatibel mit Java 8.

0
rohan

wenn Sie Java 8 oder die nächste Version verwenden, müssen Sie die Frühlingsversion aktualisieren und die Frühlingsversion sollte 4.xxx sein

0
Shafaet Hossain