Tomcat ClassFormatException : navigation dans les problèmes de compatibilité Java 8
Le déploiement d'applications Web de Tomcat 7 avec Java 7 vers Tomcat 7 avec Java 8 peut occasionnellement déclencher l'exception suivante :
org.apache.tomcat.util.bcel.classfile.ClassFormatException: Invalid byte tag in constant pool: 15
Comprendre la cause profonde
Bien que Tomcat 7 soit compatible avec Java 8, l'activation de l'analyse des annotations (metadata-complete="true" dans web.xml) introduit des problèmes potentiels dus aux limitations de la Byte Code Engineering Library (BCEL), qui ne peut pas traiter entièrement les nouveaux codes d'octet Java 8. Cela entraîne des erreurs lorsque Tomcat tente de rechercher des annotations.
Solutions potentielles
1. Désactiver l'analyse des annotations (non recommandé)
Si vous pouvez éviter d'utiliser l'analyse des annotations, tout devrait fonctionner correctement. Pour le désactiver, définissez metadata-complete sur "false" dans votre web.xml.
2. Mise à jour vers Tomcat 7.0.53 ou version ultérieure (recommandé)
À partir de Tomcat 7.0.53, le compilateur sous-jacent a été mis à jour avec une prise en charge améliorée de Java 8, résolvant ainsi la plupart des problèmes d'analyse des annotations.
3. Exclure des fichiers JAR spécifiques de l'analyse (solution intermédiaire)
Si vous ne parvenez pas à mettre à niveau vers Tomcat 7.0.53 mais que vous avez toujours besoin d'une analyse d'annotations, vous pouvez essayer d'ajouter la ligne suivante à /etc/tomcat7/catalina .properties :
junit.jar,junit-*.jar,ant-launcher.jar,\ jfxrt.jar,nashorn.jar
Cela demandera à Tomcat de ne pas analyser ces fichiers JAR spécifiques pour les annotations, résolvant potentiellement le problème.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!