Heim >Java >javaLernprogramm >„Ungültiges Byte-Tag im Konstantenpool: 15' – Warum gibt Tomcat 7 diesen Fehler aus, wenn es unter Java 8 ausgeführt wird?

„Ungültiges Byte-Tag im Konstantenpool: 15' – Warum gibt Tomcat 7 diesen Fehler aus, wenn es unter Java 8 ausgeführt wird?

Linda Hamilton
Linda HamiltonOriginal
2024-11-04 13:07:301122Durchsuche

Ungültiges Byte-Tag im Konstantenpool: Ein Tomcat-Problem mit Java 8

Es tritt der Fehler „Ungültiges Byte-Tag im Konstantenpool: 15“ auf beim Versuch, eine Webanwendung von Tomcat 7 auf einen anderen Server zu portieren, auf dem Tomcat 7 mit Java 8 ausgeführt wird? Dieser Artikel befasst sich mit dem Problem und bietet Lösungen.

Problembeschreibung:

Beim Starten von Tomcat kann die Anwendung auf einen Fehler stoßen, wie im Protokoll catalina.out zu sehen ist:

org.apache.tomcat.util.bcel.classfile.ClassFormatException: Invalid byte tag in constant pool: 15

Mögliche Ursache:

Der Fehler tritt auf, weil Java 8 neue Bytecodes einführt, die BCEL, die von Tomcat 7 verwendete Klassenanalysebibliothek, möglicherweise nicht enthält in der Lage, effektiv zu verarbeiten.

Lösung:

Offizielle Lösung:

Laut Tomcat-Dokumentation wird Tomcat 7 auf Java ausgeführt 8 sollte einwandfrei funktionieren.

Problem beim Scannen von Anmerkungen:

Wenn jedoch das Scannen von Anmerkungen in der web.xml-Datei der Webanwendung aktiviert ist, können aufgrund der Unfähigkeit von BCEL Probleme auftreten um Java 8-Byte-Codes zu verarbeiten. In solchen Fällen können Ausnahmen wie die folgende auftreten:

SEVERE: Unable to process Jar entry [jdk/nashorn/internal/objects/NativeString.class] from Jar [jar:file:/usr/lib/jvm/jdk1.8.0_5/jre/lib/ext/nashorn.jar!/] for annotations
org.apache.tomcat.util.bcel.classfile.ClassFormatException: Invalid byte tag in constant pool: 15

Lösungen für das Scannen von Anmerkungen:

  1. Scannen von Anmerkungen deaktivieren: Vermeiden Sie die Aktivierung des Annotationsscans (setzen Sie metadata-complete="true" in web.xml auf false). Dadurch kann Tomcat 7 normal funktionieren. Diese Lösung deaktiviert jedoch das Scannen von Anmerkungen in der Webanwendung.
  2. Tomcat aktualisieren: Upgrade auf Tomcat 7.0.53 oder höher, was einen aktualisierten Compiler enthält, der Java 8 besser unterstützt.
  3. Problematische Jars ausschließen: Wenn Annotations-Scanning verwendet werden muss und Ihr Code nicht auf Java 8 basiert, fügen Sie die folgende Zeile zu /etc/tomcat7/catalina.properties hinzu:
junit.jar,junit-*.jar,ant-launcher.jar,\
jfxrt.jar,nashorn.jar

Diese Änderung stellt sicher, dass Tomcat problematische Gläser beim Scannen von Annotationen überspringt.

Das obige ist der detaillierte Inhalt von„Ungültiges Byte-Tag im Konstantenpool: 15' – Warum gibt Tomcat 7 diesen Fehler aus, wenn es unter Java 8 ausgeführt wird?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn