web-dev-qa-db-fra.com

Tomcat & Spring Web - Exception de classe non trouvée org.springframework.web.context.ContextLoaderListener

L'exception suivante apparaît lorsque j'essaie de démarrer Tomcat via Eclipse (via un clic droit sur Projet, Exécuter en tant que -> Exécuter sur le serveur).

SEVERE: Error configuring application listener of class org.springframework.web.context.ContextLoaderListener
Java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener
    at org.Apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.Java:1676)
    at org.Apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.Java:1521)
    at org.Apache.catalina.core.DefaultInstanceManager.loadClass(DefaultInstanceManager.Java:415)
    at org.Apache.catalina.core.DefaultInstanceManager.loadClassMaybePrivileged(DefaultInstanceManager.Java:397)
    at org.Apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.Java:118)
    at org.Apache.catalina.core.StandardContext.listenerStart(StandardContext.Java:4660)
    at org.Apache.catalina.core.StandardContext$1.call(StandardContext.Java:5226)
    at org.Apache.catalina.core.StandardContext$1.call(StandardContext.Java:5221)
    at Java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.Java:303)
    at Java.util.concurrent.FutureTask.run(FutureTask.Java:138)
    at Java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.Java:886)
    at Java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.Java:908)
    at Java.lang.Thread.run(Thread.Java:662)
Jun 12, 2011 8:46:11 PM org.Apache.catalina.core.StandardContext listenerStart

Je construis mon projet avec Maven (m2Eclipse). J'ai ajouté les dépendances nécessaires aux bibliothèques Spring et je peux voir le fichier spring-web.jar dans le répertoire lib de l'artefact final (qui contient la classe). Lorsque je déploie l'application en dehors de l'IDE, cela fonctionne bien.

Toute indication sur les raisons pour lesquelles cela se produit serait hautement appréciée.

33
Devanath Rao

J'ai rencontré le même problème il y a quelques jours avec m2Eclipse (sans intégration WTP disponible via m2Eclipse-extras) sur Eclipse Indigo. J'ai créé un module Web Maven et y ai ajouté manuellement la facette Dynamic Web Module. Lorsque je l'ai déployé sur Eclipse WST Tomcat Server, il est apparu que mes dépendances Maven ne sont pas transmises au serveur lorsque le projet y est publié.

La solution était simple. Cliquez avec le bouton droit sur votre projet Web dans l'Explorateur de projets -> sélectionnez 'Propriétés'. Sous Propriétés du projet, sélectionnez "Assemblage de déploiement". 

La page de propriétés de l'ensemble de déploiement affiche le contenu qui sera publié sous forme d'artefact assemblé par Eclipse sur le serveur. Vous devez indiquer à Eclipse que vous souhaitez que toutes vos dépendances Maven soient également publiées.

Pour ce faire, cliquez sur le bouton "Ajouter", puis sélectionnez "Entrées du chemin de construction Java". Cliquez sur Suivant et sélectionnez Dépendances Maven. Cela publiera les fichiers JAR de dépendance Maven dans le dossier lib lorsque Eclipse publiera votre projet sur le serveur WST.

Cette approche a fonctionné pour moi.

79
Yohan Liyanage

Le moyen le plus simple de savoir ce que Eclipse mettra dans votre fichier war pour les déploiements de serveurs consiste à effectuer un clic droit -> Exporter -> Fichier WAR. Vous pouvez ensuite décompresser ceci et voir ce qu’il contient.

Si vous ouvrez ".settings/org.Eclipse.wst.common.component", vous devriez voir la définition de l'outil Web webapp et voir quelque chose comme:

<project-modules id="moduleCoreId" project-version="1.5.0">
<wb-module deploy-name="MyApp">
    <wb-resource deploy-path="/" source-path="/src/main/webapp"/>
    <wb-resource deploy-path="/WEB-INF/classes" source-path="/src/main/Java"/>
    <wb-resource deploy-path="/WEB-INF/classes" source-path="/src/main/resources"/>
    <property name="Java-output-path" value="target/classes"/>
    <property name="context-root" value="MyApp"/>
</wb-module>
</project-modules>

Sur votre chemin de construction dans Eclipse, assurez-vous que "Dépendances Maven" apparaît dans les bibliothèques. Les dernières versions du plugin m2Eclipse et de WST devraient automatiquement récupérer les dépendances Maven et les déposer dans WEB-INF/lib dans votre fichier war.

Dernier point mais non le moindre, vous pouvez envisager de prendre la dernière version de SpringSource Tool Suite (STS). STS présente un certain nombre de fonctionnalités intéressantes, notamment le regroupement des derniers m2Eclipse et WST. Vous pouvez toujours l'utiliser avec Tomcat (ou sa version de Tomcat). Il contient également des archétypes et des tutoriels pour permettre à une application Web de fonctionner rapidement.

Prendre plaisir!

4
Al Baker

Ajoutez ces fichiers (quelle que soit la version que vous utilisez) à

Apache-Tomcat-8.0.35\lib 

dossier (et redémarrez votre serveur):

spring-aop-4.0.1.RELEASE.jar
spring-beans-4.0.1.RELEASE.jar
spring-context-4.0.1.RELEASE.jar
spring-core-4.0.1.RELEASE.jar
spring-expression-4.0.1.RELEASE.jar
spring-web-4.0.1.RELEASE.jar
spring-webmvc-4.0.1.RELEASE.jar
0
Shahriar