web-dev-qa-db-fra.com

Log4jConfigListener introuvable - le démarrage du contexte échoue

J'essaie de configurer une application Web sur Eclipse. J'utilise Tomcat 6.0 et jdk 1.6.0_23. Pour une raison quelconque, j'obtiens cette erreur: 

 SEVERE: Erreur de configuration du port d'écoute de la classe org.springframework.web.util.Log4jConfigListener 
 Java.lang.ClassNotFoundException: org.springframework.web.util.Log4jConfigListener 
. Apache.catalina.loader.WebappClassLoader.loadClass (WebappClassLoader.Java:1645) 
 À l'org.Apache.catalina.loader.WebappClassLoader.loadClass (WebappClassLoader.Java:1491) 
 À l'org. catalina.core.StandardContext.listenerStart (StandardContext.Java:4078) 
 à org.Apache.catalina.core.StandardContext.start (StandardContext.Java:4630) 
 à l'orgAApache.catalina. core.ContainerBase.start (ContainerBase.Java:1045) 
 à org.Apache.catalina.core.StandardHost.start (StandardHost.Java:785) 
 à org.Apache.catalina.core. ContainerBase.start (ContainerBase.Java:1045) 
 À l'adresse org.Apache.catalina.core.StandardEngine.start (StandardEngine.Java:445) à l'adresse org.Apache.catalina.core.StandardService. start (StandardService.Java:519) 
 à org.Apache.c atalina.core.StandardServer.start (StandardServer.Java:710) 
 à org.Apache.catalina.startup.Catalina.start (Catalina.Java:581) à Sun.reflect.NativeMethodAccessorImpl. invoke0 (Méthode native) 
 à Sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.Java:39) 
 à Sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.Java:25.). à Java.lang.reflect.Method.invoke (Method.Java:597) 
 à org.Apache.catalina.startup.Bootstrap.start (Bootstrap.Java:289) 
 à org.Apache .catalina.startup.Bootstrap.main (Bootstrap.Java:414) 
 24 janv. 2011 11:44:08 org.Apache.catalina.core.StandardContext listenerStart 
 SEVERE: Erreur de configuration de l'application programme d'écoute de la classe org.springframework.web.context.ContextLoaderListener 
 Java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener 
 à l'org.Apache.catalina.loader.WebappClass WebappClassLoader.Java:1645)
 à org.Apache.catalina.loader.WebappClassLoader.loadClass (WebappClassLoader.Java:1491) 
 à org.Apache.catalina.core.StandardContext.listenerStart (StandardContext.Java:4078) à .org. .Apache.catalina.core.StandardContext.start (StandardContext.Java:4630) 
 À l'org.Apache.catalina.core.ContainerBase.start (ContainerBase.Java:1045) 
 À l'org.Apache .catalina.core.StandardHost.start (StandardHost.Java:785) 
 dans org.Apache.catalina.core.ContainerBase.start (ContainerBase.Java:1045) 
 dans org.Apache.catalina .core.StandardEngine.start (StandardEngine.Java:445) 
 dans org.Apache.catalina.core.StandardService.start (StandardService.Java:519) 
 dans org.Apache.catalina.core .StandardServer.start (StandardServer.Java:710) 
 À org.Apache.catalina.startup.Catalina.start (Catalina.Java:581) 
 À Sun.reflect.NativeMethodAccessorImpl.invoke0 (Native Méthode) 
 À Sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.Java:39) 
 À Sun .reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.Java:25) 
 à Java.lang.reflect.Method.invoke (Method.Java:597) 
 à l'organisation.Apache.catalina.startup.Bootstrap .start (Bootstrap.Java:289) 
 à l'org.Apache.catalina.startup.Bootstrap.main (Bootstrap.Java:414) 

J'ai vérifié si toutes les bibliothèques avaient été ajoutées au chemin de compilation et que tout semblait correct. log4j-1.2.15.jar est inclus, ainsi que toutes les bibliothèques Spring nécessaires.

Je suis très confus quant au problème, en particulier parce que le projet fonctionnait bien sur un autre ordinateur. Toute aide concernant ce problème sera hautement appréciée.

Naftal

12
1000Suns

La classe org.springframework.web.util.Log4jConfigListener n'est définitivement pas dans votre chemin d'accès aux classes. 

La première chose que je suggérerais est que vous augmentiez le niveau de journalisation dans Tomcat - dans le dossier conf - vers "ALL" ou "DEBUG" afin que vous puissiez voir exactement ce qui se passe dans le conteneur qui empêche cette classe d'être trouvé.

Deuxièmement, je vous recommanderais de rechercher dans le fichier de classe manquant le fichier de classe manquant dans vos fichiers JAR en exécutant grep, si vous utilisez linux/mac:

  # run at the root of your lib folders:
  grep -ri "org.springframework.web.util.Log4jConfigListener" *

La commande ci-dessus renverra tous les fichiers JAR contenant ce package. Une fois le fichier JAR isolé, vous pouvez résoudre le problème. 

Troisièmement, assurez-vous de ne pas avoir de conflits. Plusieurs versions de Log4j se trouvant dans votre chemin de classe vont faire des ravages. Comment le système est-il censé savoir quel package de org/org.springframework.web.util.Log4jConfigListener à charger s’il y en a 2? Tomcat a 3 dossiers de classpath différents:

 shared/lib
 lib
 webapps/yourapp/WEB-INF/lib

Assurez-vous de n’avoir qu’un fichier JAR log4j dans un seul de ces dossiers.

4
jmort253

La deuxième suggestion de Reticulogic est correcte. Toutefois, dans Eclipse Helios, l'option "Dépendances du module Java EE" a été supprimée. La solution pour Helios est la suivante:

  1. Faites un clic droit sur votre projet dans Eclipse et allez dans Propriétés -> Assemblage de déploiement
  2. Cliquez sur "Ajouter ..."
  3. Sélectionnez "Entrées du chemin de construction Java" et cliquez sur "Suivant".
  4. sélectionnez "Dépendances Maven" et cliquez sur "Terminer"
39
Templar

Si vous utilisez maven et Eclipse 

1) Regardez dans votre fichier .classpath de projet Web. Si vous avez une entrée de chemin de classe "org.maven.ide.Eclipse.MAVEN2_CLASSPATH_CONTAINER", assurez-vous que l'attribut est également présent.

<classpathentry kind="con" path="org.maven.ide.Eclipse.MAVEN2_CLASSPATH_CONTAINER">
    <attributes>
        <attribute name="org.Eclipse.jst.component.dependency" value="/WEB-INF/lib"/>
    </attributes>
</classpathentry>

2) Si cela ne fonctionne pas, cliquez-droit sur votre projet Web dans Eclipse et sélectionnez Propriétés -> Dépendances du module JavaEE. Assurez-vous que la case Dépendances Maven est cochée.

Puis sauvegardez, construisez déployez yada yada

3
Reticulogic

Une solution simple consiste à nettoyer le répertoire Tomcat dans Eclipse. Cela a fonctionné pour moi.

3
user3331355

Si vous utilisez log4j2, vous pouvez trouver ces classes dans

org.Apache.logging.log4j.web.*

paquet.

0
LakiGeri