web-dev-qa-db-fra.com

Java 1.8 ASM ClassReader n'a pas pu analyser le fichier de classe - probablement en raison d'une nouvelle Java qui n'est pas encore prise en charge

Mon application Web fonctionne correctement sur JDK 1.7 mais se bloque sur 1.8 avec l'exception suivante (lors du démarrage du serveur d'applications avec Jetty 8). J'utilise la version Spring: 3.2.5.LELEASE.

Exception:

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

Je suppose que ce problème est dû à spring et à la bibliothèque "asm.jar" dont il dépend.

Comment résoudre ça?

77

Comme @prunge et @Pablo Lozano ont déclaré, vous avez besoin de Spring 4 si vous voulez compiler le code pour Java 8 (--target 1.8), mais vous pouvez toujours exécuter des applications sur Java 8 compilé en Java 7 si vous utilisez Spring 3.2.X.

Départ http://docs.spring.io/spring/docs/current/spring-framework-reference/html/new-in-4.0.html

Notez que le niveau Java 8 (-target 1.8, comme requis par -source 1.8) est uniquement pris en charge à partir de Spring Framework 4.0. En particulier, les applications basées sur Spring 3.2 doivent être compilées avec un maximum de Java 7 comme cible, même s’ils ont été déployés sur un environnement d’exécution Java 8. Veuillez effectuer la mise à niveau vers Spring 4 pour Java 8 applications basées.

110
Leszek Gruchała

Si vous rencontrez cette erreur même si vous compilez avec -target 1.7, veuillez noter que ceci est dû à un bogue dans Spring Framework qui oblige le lecteur de classe ASM à charger des classes jdk (Java. * Ou javax. *), Qui sont bien sûr compilé avec -target 1.8.

Ceci, combiné à l'ancienne version d'ASM au printemps 3.2.8 et au-dessous, qui ne prend pas en charge l'analyse syntaxique de fichiers de classe 1.8, peut également entraîner cette erreur.

Plus d'informations sur le problème peuvent être trouvées ici: https://jira.spring.io/browse/SPR-11719

Cela devrait être corrigé dans la version 3.2.9 de Spring Framework, qui devrait être bientôt disponible.

Bien entendu, la mise à niveau vers Spring Framework 4 résoudra également le problème, car il contient déjà une version plus récente d'ASM.

Cependant, si pour une raison quelconque vous ne pouvez pas encore passer à la version 4, il est bon de savoir qu’il existe une alternative (bientôt).

65
ItayK

J'ai eu le même problème et l'ai résolu. J'utilise spring 3.x avec Java 8.). Si les solutions ci-dessus ne fonctionnent pas, changez les fichiers JAR et recherchez si ces fichiers sont compatibles avec la version Java utilisent ou non. spring 3.x n’est pas compatible avec Java 8.

0
rohan

si vous utilisez Java 8 ou la version suivante, vous devez mettre à niveau la version de printemps et la version de printemps doit être 4.xxx

0
Shafaet Hossain