web-dev-qa-db-fra.com

ClassNotFoundException DispatcherServlet lors du lancement de Tomcat (dépendances Maven non copiées dans wtpwebapps)

Je suis tombé sur ce problème à quelques reprises et je viens de tomber sur une solution (semi-) fiable. a la moindre idée de la cause sous-jacente et des raisons pour lesquelles mon correctif fonctionne.

Le problème - J'ai une application Web Spring 3 que je souhaite utiliser l'option Exécuter sur le serveur dans Eclipse pour s'exécuter sur un serveur Tomcat 7. Avec certains projets, cela fonctionne, mais certains semblent avoir un état de panne, chaque fois que le serveur démarre, je reçois une classe introuvable: org.springframework.web.servlet.DispatcherServlet.

Après une enquête, j'ai découvert que les dépendances maven du projet n'avaient pas été copiées dans WEB-INF/lib dans ${PROJECT_LOCATION}/.metadata/.plugins/org.Eclipse.wst.server.core/tmp0/wtpwebapps/.

J'ai essayé beaucoup de choses avant de finalement constater que le projet contenait un avertissement dans le panneau Problèmes:

Classpath entry org.maven.ide.Eclipse.MAVEN2_CLASSPATH_CONTAINER 
will not be exported or published. Runtime ClassNotFoundExceptions may result.

J'aurais peut-être dû le remarquer plus tôt.

Quoi qu'il en soit, le fait de sélectionner ceci et d'effectuer la "Réparation rapide" corrige le problème et je peux exécuter mon projet avec joie. La solution rapide consiste à: "Marquer l'entrée de chemin de classe brute associée en tant que dépendance de publication/exportation".

Le problème, c'est que même si cela fonctionne, je ne sais pas ce que cela signifie. Je ne vois aucune modification évidente dans la configuration de mon projet une fois celle-ci terminée. J'aimerais bien savoir quel est le problème et si je peux éviter que cela ne se reproduise. J'aimerais également savoir s'il y a quelque chose que j'aurais pu faire moi-même (autre que la réparation rapide) qui l'aurait corrigée, car j'ai l'impression d'essayer à peu près tout le reste.

Merci de votre aide.

25
Russell

Consultez la section "Assemblage de déploiement" sous les propriétés du projet. Le contenu de cette page spécifie comment votre projet doit être assemblé dans une application en cours d'exécution. En particulier, c’est l’endroit où vous pouvez contrôler les bibliothèques à référencer par votre projet. Sélectionnez Ajouter -> Entrées du chemin de génération Java. Vous pourrez choisir parmi les entrées de votre chemin de construction existant à inclure dans l'assembly.

La solution rapide que vous avez trouvée a fait la même chose pour vous. Si vous êtes curieux de savoir ce qui se passe sous les couvertures, consultez votre fichier .classpath avant et après la correction rapide. Le correctif rapide balise l'entrée de chemin de classe avec des informations d'assemblage.

34

Vérifiez le fichier .class et remplacez l'entrée suivante

**<classpathentry kind="con" path="org.maven.ide.Eclipse.MAVEN2_CLASSPATH_CONTAINER" />**

avec au-dessous: -

**<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>**

Cela a fonctionné pour moi.

2
Muskan

Il semble que vous deviez également installer Maven Integration for WTP plugin. On peut en trouver la description sur issues.sonatype.org .

1
Andrius Kurtinaitis

J'ai rencontré ce problème aujourd'hui, sur un projet qui fonctionnait depuis longtemps. J'ai essayé toutes les solutions ci-dessus, mais (1) je ne voyais pas l'avertissement dans le panneau Problèmes comme l'affiche; (2) Les entrées de mon chemin de construction Java de Deployment Assembly ne montraient rien d’autre à déployer; (3) l'entrée .classpath pour org.Eclipse.jst.component.dependency était déjà présente; et (4) Maven Integration for WTP était déjà installé sur mon ordinateur. J'ai finalement retiré mon projet du serveur Tomcat, puis je l'ai redéployé et le problème a disparu.

0
mojoken