Estoy portando una aplicación web de Tomcat 7 a otro servidor con Tomcat 7 pero con Java 8.
Tomcat se inicia correctamente pero en el registro catalina.out
obtengo:
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)
¿Cual podría ser el problema?
Respuestas:
La "respuesta oficial" es que Tomcat 7 se ejecuta en Java 8, consulte http://tomcat.apache.org/whichversion.html ("Java versión 6 y posteriores").
Sin embargo, si el escaneo de anotaciones está habilitado (metadata-complete = "true" en web.xml), existen algunos problemas debido a BCEL (no se pueden procesar los nuevos códigos de bytes de Java 8). Obtendrá excepciones como (al menos con 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)
Si no utiliza el escaneo de anotaciones, todo funciona bien, a partir de la versión 7.0.53 (compilador actualizado con mejor compatibilidad con Java 8).
(ACTUALIZACIÓN 2014-10-17) Si está utilizando el escaneo de anotaciones y su propio código no está basado en Java 8, otra solución es agregar la siguiente línea
/etc/tomcat7/catalina.properties
(texto agregado después de "ant-launcher.jar", por lo que forma parte de la propiedadtomcat.util.scan.DefaultJarScanner.jarsToSkip
):Probado con Tomcat 7.0.28 y Oracle JDK 8_25 en Debian 7.6.
fuente
Este fue un error de Tomcat que resurgió nuevamente con el código de bytes de Java 9. Las versiones exactas que solucionan esto (para ambos códigos de bytes de Java 8/9) son:
fuente
Actualice a Tomcat 7.0.58 (o más reciente).
Ver: https://bz.apache.org/bugzilla/show_bug.cgi?id=57173#c16
fuente
Este problema ocurre porque ha instalado jre1.8.0_101-1.8.0_101-fcs.i58.rpm y jdk-1.7.0_80-fcs.x86_64.rpm. así que simplemente desinstale su jre rpm y reinicie su aplicación. Debería funcionar.
fuente
Para mí, actualizar bcel a 6.0 solucionó el problema.
fuente
Para mí funcionó, al sacar los frascos en cuestión de la guerra. Con Maven, solo tenía que excluir, por ejemplo
fuente
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.Actualice y agregue el siguiente argumento en
<root or instance tomcat folder>/conf/catalina.properties
org.apache.catalina.startup.ContextConfig.jarsToSkip=...,lombok-1.18.4.jar
2.limpiar y desplegar el proyecto futuro.
fuente
Me enfrenté a este problema con tomcat 7 + jdk 1.8
con java 1.7 y versiones inferiores está funcionando bien.
ventana -> preferencias -> java -> jre instalado
en mi caso cambié jre1.8 a JDK 1.7
y, en consecuencia, modifique la faceta del proyecto, seleccione la misma versión de Java que está en el JRE instalado seleccionado.
fuente
Obtuve un error similar (org.aspectj.apache.bcel.classfile.ClassFormatException: etiqueta de byte no válida en el grupo constante: 15) mientras usaba aspectj 1.8.13. La solución fue alinear toda la compilación en jdk 8 y tener cuidado de no poner otras versiones de la biblioteca de Aspectj (1.6.13 por ejemplo) en buildpath / classpath.
fuente
Tuve el mismo problema al ejecutar mi aplicación de arranque de primavera con tomcat7: ejecutar
Da error con la siguiente dependencia en 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
Pero cuando lo especifico correctamente en el alcance de la prueba, no da error:
fuente