Je viens de passer du fichier web.xml à la servlet 3.0 (à partir d'une application fonctionnant sous la version 2.4 précédemment) et l'erreur suivante s'affiche (l'activation de la journalisation précise pour org.Apache.Tomcat.util):
mtyson FINE: Scanning JAR [file:/usr/Java/jdk1.6.0_22/jre/lib/ext/jcharset.jar] from classpath
mtyson Jul 19, 2011 10:04:40 AM org.Apache.catalina.startup.HostConfig deployDirectory
mtyson SEVERE: Error deploying web application directory ROOT
mtyson org.Apache.Tomcat.util.bcel.classfile.ClassFormatException: Invalid byte tag in constant pool: 60
MISE À JOUR: Just Tried Tomcat 7.0.19 - mêmes résultats
Ce n'est peut-être pas votre problème, mais le mien était le identique à celui-ci - une ancienne version de com.ibm.icu:icu4j. J'ai résolu le problème en changeant la configuration de construction pour exclure les anciennes dépendances transitives et explicitement en fonction de la dernière version (4.8).
Ajouter
metadata-complete="true"
à votre web.xml devrait trier le problème
<web-app version="3.0"
xmlns="http://Java.Sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://Java.Sun.com/xml/ns/javaee http://Java.Sun.com/xml/ns/javaee/web-app_3_0.xsd"
metadata-complete="true">
Ceci indique à Tomcat de ne pas analyser les classes pour les annotations: http://www.tomcatexpert.com/blog/2011/10/12/how-use-fragments-and-annotations-configure-your-web-application
Merci James A Wilson pour votre réponse - mettre à jour icu4j comme vous l’avez suggéré fonctionne pour moi et me permet de conserver la version = "3.0" dans mon web.xml (que je préfère à long terme).
icu4j 2.6.1 était la version qui ne fonctionnait pas, la mise à niveau vers la version 3.4.4 de NEXT résoudra ce problème. Je ne suis PAS allé à la dernière version de icu4j (49.1) car elle est 4 Mo plus grande que la version 3.4.4.
Voici un extrait de configuration Maven pour verrouiller votre version de dépendance transitive (sans ajouter de dépendance explicite):
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.ibm.icu</groupId>
<artifactId>icu4j</artifactId>
<version>3.4.4</version>
</dependency>
</dependencies>
</dependencyManagement>
Je suis tombé sur le même problème aujourd'hui. Dans mon cas, la dépendance venait via com.google.code.findbugs: annotations: jar: 1.3.8. Cela signifie que cette bibliothèque n’est utilisée que lors de la construction, pour utiliser des annotations afin de désactiver certains avertissements de findbug. Dans ce cas, au lieu de changer de version, il est prudent de modifier simplement la portée de la dépendance et de ne pas prendre la bibliothèque au moment de l'exécution:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.ibm.icu</groupId>
<artifactId>icu4j</artifactId>
<scope>provided</scope>
</dependency>
....
Cela s'est avéré être un fichier jasper incompatible inclus dans la construction, en conflit avec le fichier jasper.jar dans Tomcat 7.
Je pense que c'est un bogue lors de l'analyse du fichier web.xml
En utilisant cela fonctionne pour moi ...
<web-app version="2.5" xmlns="http://Java.Sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://Java.Sun.com/xml/ns/javaee http://Java.Sun.com/xml/ns/javaee/web-app_3_0.xsd">
<session-config>
<tracking-mode>COOKIE</tracking-mode>
</session-config>
Notez l'utilisation de la version = "2.5" avec le schéma web-app_3_0.xsd et la présence du mode de suivi session-config qui n'est qu'une partie de la spécification 3.0 et non de la version 2.5 (autant que je sache)
Je faisais face au même problème depuis une semaine et je l'ai résolu en remplaçant simplement le fichier icu4j.2.1.jar par la dernière version de jar.
Résolu en supprimant le dossier et en téléchargeant à nouveau les fichiers jar
Dans la version 2.6.1. com.ibm.icu.impl.data.LocaleElements_zh__PINYIN.class n'est pas valide. La seule solution est de mettre à jour, d'autres solutions ne sont que des solutions de contournement.
Pour le vérifier, exécutez le test suivant dans votre projet (à condition que icu-x.x.x.jar se trouve sur votre chemin de classe):
@Test
public void testValidityOfLocaleElements_zh__PINYINJar() throws ClassNotFoundException {
getClass().forName("com.ibm.icu.impl.data.LocaleElements_zh__PINYIN");
}
Nous avions commencé à avoir la même erreur avec une modification mineure de notre application sans aucune mise à niveau vers Java, Tomcat ou des dépendances de projet. Nous avons icu4j 2.6.1
Après avoir passé beaucoup de temps et essayé de mettre à jour icu4j vers diverses versions plus récentes (nous avons remarqué et constaté que les versions d'icu passaient de la version 4.8.x à la version 49.xx, 50.xx, etc. ), nous avons trouvé le problème.
Notre modification mineure a soumis une nouvelle classe (classe A) mappée en veille prolongée. Hibernate s’initialise au démarrage du fichier WAR et vérifie la correspondance entre les objets persistants et leurs mappages. Une autre classe est une énumération (classe B) portant le même nom et le même package dans notre base de code. Une fois que nous avons corrigé cette classe en double, le problème a disparu.