Ich portiere eine Webanwendung von Tomcat 7 auf einen anderen Server mit Tomcat 7, aber mit Java 8.
Tomcat startet erfolgreich, aber im Protokoll catalina.out
erhalte ich:
org.apache.tomcat.util.bcel.classfile.ClassFormatException: Invalid byte tag in constant pool: 15
at org.apache.tomcat.util.bcel.classfile.Constant.readConstant(Constant.java:131)
at org.apache.tomcat.util.bcel.classfile.ConstantPool.<init>(ConstantPool.java:60)
at org.apache.tomcat.util.bcel.classfile.ClassParser.readConstantPool(ClassParser.java:209)
at org.apache.tomcat.util.bcel.classfile.ClassParser.parse(ClassParser.java:119)
at org.apache.catalina.startup.ContextConfig.processAnnotationsStream(ContextConfig.java:2049)
at org.apache.catalina.startup.ContextConfig.processAnnotationsJar(ContextConfig.java:1931)
at org.apache.catalina.startup.ContextConfig.processAnnotationsUrl(ContextConfig.java:1899)
at org.apache.catalina.startup.ContextConfig.processAnnotations(ContextConfig.java:1885)
at org.apache.catalina.startup.ContextConfig.webConfig(ContextConfig.java:1281)
at org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:855)
at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:346)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5172)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:899)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:875)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:618)
at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1100)
at org.apache.catalina.startup.HostConfig$DeployDirectory.run(HostConfig.java:1618)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
Was könnte das Problem sein?
Antworten:
Die "offizielle Antwort" lautet, dass Tomcat 7 unter Java 8 ausgeführt wird (siehe http://tomcat.apache.org/whichversion.html) ("Java Version 6 und höher").
Wenn jedoch das Scannen von Anmerkungen aktiviert ist (metadata-complete = "true" in web.xml), treten aufgrund von BCEL einige Probleme auf (die neuen Java 8-Byte-Codes können nicht verarbeitet werden). Sie erhalten Ausnahmen wie (zumindest mit Tomcat 7.0.28):
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 at org.apache.tomcat.util.bcel.classfile.Constant.readConstant(Constant.java:131)
Wenn Sie das Scannen von Anmerkungen nicht verwenden, funktioniert ab Version 7.0.53 (aktualisierter Compiler mit besserer Java 8-Unterstützung) alles einwandfrei.
(UPDATE 2014.10.17) Wenn Ihr sind mit Annotation Scannen und Ihren eigenen Code ist nicht Java 8 basiert, ist eine andere Lösung die folgende Zeile in hinzufügen
/etc/tomcat7/catalina.properties
(Text nach „ant-launcher.jar“ hinzugefügt , so Teil der Immobilietomcat.util.scan.DefaultJarScanner.jarsToSkip
):Getestet mit Tomcat 7.0.28 und Oracle JDK 8_25 unter Debian 7.6.
quelle
Dies war ein Tomcat-Fehler , der mit dem Java 9-Bytecode erneut auftauchte. Die genauen Versionen, die dies beheben (für beide Java 8/9-Bytecodes), sind:
quelle
Update auf Tomcat 7.0.58 (oder neuer).
Siehe: https://bz.apache.org/bugzilla/show_bug.cgi?id=57173#c16
quelle
Dieses Problem tritt auf, weil Sie jre1.8.0_101-1.8.0_101-fcs.i58.rpm sowie jdk-1.7.0_80-fcs.x86_64.rpm installiert haben. Deinstallieren Sie einfach Ihre jre rpm und starten Sie Ihre Anwendung neu. Es sollte klappen.
quelle
Für mich hat das Upgrade von bcel auf 6.0 das Problem behoben.
quelle
Für mich hat es funktioniert, indem ich die fraglichen Gläser aus dem Krieg entfernt habe. Bei Maven musste ich zum Beispiel nur ausschließen
quelle
Unable to process Jar entry [module-info.class] from Jar [jar:file:/xxxxxxxx/lombok-1.18.4.jar!/] for annotations org.apache.tomcat.util.bcel.classfile.ClassFormatException: Invalid byte tag in constant pool: 19
1.Update und füge das folgende Argument in an
<root or instance tomcat folder>/conf/catalina.properties
org.apache.catalina.startup.ContextConfig.jarsToSkip=...,lombok-1.18.4.jar
2. Reinigen und implementieren Sie das zu pulsende Projekt.
quelle
Ich habe dieses Problem mit Tomcat 7 + JDK 1.8 konfrontiert
Mit Java 1.7 und niedrigeren Versionen funktioniert es einwandfrei.
Fenster -> Einstellungen -> Java -> Jre installiert
In meinem Fall habe ich jre1.8 in JDK 1.7 geändert
und ändern Sie die Projektfacette entsprechend. Wählen Sie dieselbe Java-Version aus, die sich in der ausgewählten installierten JRE befindet.
quelle
Ich habe einen ähnlichen Fehler (org.aspectj.apache.bcel.classfile.ClassFormatException: Ungültiges Byte-Tag im konstanten Pool: 15) bei Verwendung von Aspektj 1.8.13 erhalten. Die Lösung bestand darin, die gesamte Kompilierung in jdk 8 auszurichten und darauf zu achten, dass die anderen Versionen der Aspectj-Bibliothek (z. B. 1.6.13) nicht in buildpath / classpath abgelegt werden.
quelle
Ich hatte das gleiche Problem beim Ausführen meiner Spring-Boot-Anwendung mit tomcat7: run
Es gibt einen Fehler mit der folgenden Abhängigkeit in maven pom.xml:
SEVERE: Unable to process Jar entry [module-info.class] from Jar [jar:file:/.m2/repository/org/apiguardian/apiguardian-api/1.1.0/apiguardian-api-1.1.0.jar!/] for annotations org.apache.tomcat.util.bcel.classfile.ClassFormatException: Invalid byte tag in constant pool: 19 Jul 09, 2020 1:28:09 PM org.apache.catalina.startup.ContextConfig processAnnotationsJar SEVERE: Unable to process Jar entry [module-info.class] from Jar [jar:file:/.m2/repository/org/apiguardian/apiguardian-api/1.1.0/apiguardian-api-1.1.0.jar!/] for annotations org.apache.tomcat.util.bcel.classfile.ClassFormatException: Invalid byte tag in constant pool: 19
Aber wenn ich es im Testbereich korrekt spezifiziere, gibt es keinen Fehler:
quelle