J'ai essayé de passer à Java 8. Lors du démarrage de notre serveur Tomcat7, avec un fichier .war compilé Java 7), j'obtiens l'erreur mystérieuse ci-dessous.
Dois-je m'attendre à ce que cela fonctionne? Ce post indique que Tomcat 7 devrait fonctionner avec 1.6 et plus. Je ne peux pas dire si Tomcat est à blâmer, ou le .war. Changer les différentes versions de Java que j'obtiens:
Tomcat est-il à blâmer, ou le .war?
Caused by: 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:2032)
at org.Apache.catalina.startup.ContextConfig.processAnnotationsJar(ContextConfig.Java:1923)
at org.Apache.catalina.startup.ContextConfig.processAnnotationsUrl(ContextConfig.Java:1891)
at org.Apache.catalina.startup.ContextConfig.processAnnotations(ContextConfig.Java:1877)
at org.Apache.catalina.startup.ContextConfig.webConfig(ContextConfig.Java:1270)
at org.Apache.catalina.startup.ContextConfig.configureStart(ContextConfig.Java:855)
at org.Apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.Java:345)
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:5161)
at org.Apache.catalina.util.LifecycleBase.start(LifecycleBase.Java:150)
Je voyais cette erreur avec Tomcat 7.0.26.
Pour répondre à votre question, Tomcat est à blâmer: https://issues.Apache.org/bugzilla/show_bug.cgi?id=53735
La mise à niveau vers la version 7.0.53 l'a corrigé pour moi (selon le problème lié, le correctif devrait être dans 7.0.30 et versions ultérieures).
J'avais Java 8 sur mon ordinateur, mais je voulais exécuter mon Tomcat utilisant Java 7 .
La solution suivante a fonctionné pour moi.
Dans %CATALINA_HOME%\bin\
(Par exemple: C:\Tomcat\bin) add setenv.bat ayant le contenu suivant:
@echo off
set Java_HOME=C:\Program Files\Java\jdk1.7.0_03
set JRE_HOME=%Java_HOME%\jre
exit /B 0
Lorsque vous exécutez startup.bat, les appels suivants se produisent:
startup.bat
|
└── catalina.bat
|
└── setenv.bat
voir:
if not exist "%CATALINA_BASE%\bin\setenv.bat" goto checkSetenvHome
call "%CATALINA_BASE%\bin\setenv.bat"
J'ai également rencontré ce problème. J'ai suivi l'erreur et j'ai découvert que je devais mettre à niveau vers la dernière version notre dépendance maven pour le pot ICU4J.
Et l'erreur a disparu maintenant:
<dependency>
<groupId>com.ibm.icu</groupId>
<artifactId>icu4j</artifactId>
<version>56.1</version>
</dependency>