webentwicklung-frage-antwort-db.com.de

ClassNotFoundException DispatcherServlet beim Starten von Tomcat (Maven-Abhängigkeiten werden nicht in wtpwebapps kopiert)

Ich bin ein paar Mal auf dieses Problem gestoßen und bin gerade erst auf eine (halb-) zuverlässige Lösung gestoßen, also dachte ich, ich würde es hier posten, falls es jemandem hilft oder falls ich es vergesse und auch nach jemandem fragt hat eine Ahnung, woran die Ursache liegt und warum mein Fix funktioniert.

Das Problem - Ich habe eine Spring-3-Webapp, mit der ich die Option Auf Server ausführen in Eclipse verwenden möchte, um auf einem Tomcat 7-Server auszuführen. Bei einigen Projekten funktioniert das einfach, aber einige scheinen in einen fehlerhaften Zustand zu geraten, wobei jedes Mal, wenn der Server gestartet wird, eine Klasse nicht gefunden wird: org.springframework.web.servlet.DispatcherServlet.

Nach einiger Untersuchung stellte ich fest, dass die Abhängigkeiten des Projekts nicht in WEB-INF/lib in ${PROJECT_LOCATION}/.metadata/.plugins/org.Eclipse.wst.server.core/tmp0/wtpwebapps/ kopiert wurden.

Ich habe viele Dinge ausprobiert, bevor ich endlich gemerkt habe, dass das Projekt eine Warnung im Fenster "Probleme" angezeigt hat:

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

Vielleicht hätte ich das früher bemerkt.

Wenn Sie diese Option auswählen und "Quick Fix" ausführen, wird das Problem behoben, und ich kann mein Projekt problemlos ausführen. Die schnelle Lösung lautet: "Den zugehörigen unformatierten Classpath-Eintrag als Publish/Export-Abhängigkeit markieren".

Das Problem ist, obwohl dies funktioniert, weiß ich nicht, was es bedeutet. Ich kann keine offensichtlichen Änderungen in meiner Projektkonfiguration sehen, nachdem sie abgeschlossen ist. Ich würde gerne wissen, was das eigentliche Problem ist und ob ich es vermeiden kann, dass es wieder passiert. Ich würde auch gerne wissen, ob es etwas gibt, was ich selbst hätte tun können (abgesehen von der schnellen Lösung), das das Problem behoben hätte, weil ich das Gefühl hatte, dass ich so ziemlich alles andere probiert habe.

Danke für Ihre Hilfe.

25
Russell

Sehen Sie sich den Abschnitt "Bereitstellungsassembly" unter Projekteigenschaften an. Der Inhalt dieser Seite gibt an, wie Ihr Projekt zu einer laufenden Anwendung zusammengestellt werden soll. An dieser Stelle können Sie insbesondere festlegen, welche der Bibliotheken, auf die Ihr Projekt verweist, damit gepackt werden sollen. Wählen Sie Hinzufügen -> Java Build Path Entries. Sie können unter Ihren vorhandenen Build-Pfad-Einträgen auswählen, die in die Assembly aufgenommen werden sollen.

Die von Ihnen gefundene schnelle Lösung hat für Sie dasselbe getan. Wenn Sie neugierig sind, was unter den Deckblättern passiert, werfen Sie einen Blick auf Ihre .classpath-Datei vor und nach dem Quick Fix. Bei der schnellen Korrektur wird der Klassenpfadeintrag mit einigen Assembly-Informationen versehen.

Überprüfen Sie die .class-Datei und ersetzen Sie den folgenden Eintrag

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

mit unter: -

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

Es hat für mich funktioniert.

2
Muskan

Es scheint, Sie müssen zusätzlich Maven Integration für WTP plugin installieren. Die Beschreibung finden Sie unter issues.sonatype.org .

1

Ich bin heute auf dieses Problem gestoßen, bei einem Projekt, das schon lange gearbeitet hatte. Ich habe alle oben genannten Lösungen ausprobiert, aber (1) ich habe die Warnung nicht im Fenster "Probleme" wie das Poster gesehen; (2) In meinen Java Build-Pfadeinträgen in Deployment Assembly wurden keine weiteren verfügbaren Elemente zum Bereitstellen angezeigt. (3) der .classpath-Eintrag für org.Eclipse.jst.component.de war bereits vorhanden; und (4) Ich hatte bereits Maven Integration for WTP installiert. Ich habe mein Projekt schließlich vom Tomcat-Server entfernt und dann erneut bereitgestellt, und das Problem ist verschwunden.

0
mojoken