Tomcat ClassFormatException: Navigieren zu Java 8-Kompatibilitätsproblemen
Die Bereitstellung von Webanwendungen von Tomcat 7 mit Java 7 auf Tomcat 7 mit Java 8 kann gelegentlich ausgelöst werden die folgende Ausnahme:
org.apache.tomcat.util.bcel.classfile.ClassFormatException: Invalid byte tag in constant pool: 15
Verstehen der Grundursache
Obwohl Tomcat 7 mit Java 8 kompatibel ist, ist das Scannen von Annotationen (metadata-complete="true" in web.xml) führt zu potenziellen Problemen aufgrund der Einschränkungen der Byte Code Engineering Library (BCEL), die neue Java 8-Bytecodes nicht vollständig verarbeiten kann. Dies führt zu Fehlern, wenn Tomcat versucht, nach Anmerkungen zu suchen.
Mögliche Lösungen
1. Anmerkungsscan deaktivieren (nicht empfohlen)
Wenn Sie die Verwendung des Anmerkungsscans vermeiden können, sollte alles ordnungsgemäß funktionieren. Um es zu deaktivieren, setzen Sie metadata-complete in Ihrer web.xml auf „false“.
2. Update auf Tomcat 7.0.53 oder höher (empfohlen)
Ab Tomcat 7.0.53 wurde der zugrunde liegende Compiler mit verbesserter Java 8-Unterstützung aktualisiert, wodurch die meisten Probleme beim Scannen von Annotationen behoben wurden.
3. Bestimmte JARs vom Scannen ausschließen (Zwischenlösung)
Wenn Sie kein Upgrade auf Tomcat 7.0.53 durchführen können, aber dennoch das Scannen von Annotationen benötigen, können Sie versuchen, die folgende Zeile zu /etc/tomcat7/catalina hinzuzufügen .properties:
junit.jar,junit-*.jar,ant-launcher.jar,\ jfxrt.jar,nashorn.jar
Dadurch wird Tomcat angewiesen, das Scannen dieser spezifischen JARs nach Anmerkungen zu überspringen, wodurch das Problem möglicherweise behoben wird.
Das obige ist der detaillierte Inhalt vonTomcat ClassFormatException: Wie behebt man Kompatibilitätsprobleme mit Java 8 beim Annotation-Scanning?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!