2011-06-12 11 views
33

Otrzymuję następujący wyjątek, gdy próbuję uruchomić Tomcat przez Eclipse (klikając prawym przyciskiem myszy na Projekt, Uruchom jako -> Uruchom na serwerze).Tomcat & Spring Web - Class Not Found Wyjątek org.springframework.web.context.ContextLoaderListener

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 

buduję mojego projektu przy użyciu Maven (m2eclipse). Dodałem niezbędne zależności do bibliotek Spring i widzę plik spring-web.jar w katalogu lib końcowego artefaktu (który zawiera klasę). Kiedy wdrażam aplikację poza IDE, działa dobrze.

Wszelkie wskazówki dotyczące tego, dlaczego tak się dzieje, byłyby wysoko cenione.

+1

Jeśli informacja jest prawidłowy, to mówi, że Wdrożenie Tomcata w Eclipse nie zna tego JAR-a.Fakt, że działa dobrze poza IDE mówi, że masz prawo WAR, ale Eclipse odnosi się do czegoś innego. Poszukaj wersji eksplodowanej Eclipse, aby zobaczyć, gdzie jej brakuje. – duffymo

+0

gdzie mogę znaleźć wersję rozbitą w czasie zaćmienia? –

Odpowiedz

78

Miałem ten sam problem kilka dni temu z m2eclipse (bez dodatku integracji WTP dostępnego przez m2eclipse-dodatki) w Eclipse Indigo. Stworzyłem moduł sieciowy Maven i ręcznie dodałem do niego aspekt Dynamicznego Modułu Sieciowego. Kiedy wdrożyłem go na serwerze Eclipse WST Tomcat, okazało się, że moje zależności Maven nie są przekazywane do serwera po opublikowaniu projektu.

Rozwiązanie było proste. Kliknij prawym przyciskiem myszy swój projekt internetowy w Eksploratorze projektów -> wybierz "Właściwości". W obszarze właściwości projektu wybierz "Zgromadzenie wdrożenia".

Strona właściwości zespołu rozmieszczania pokazuje zawartość, która zostanie opublikowana jako zmontowany artefakt przez Eclipse na serwerze. Musisz powiedzieć Eclipse, że chcesz, aby wszystkie twoje zależności Mavena również zostały opublikowane.

Aby to zrobić, kliknij przycisk "Dodaj", a następnie wybierz opcję "Wpisy ścieżki budowy Java". Kliknij Dalej i wybierz Zależności Maven. Spowoduje to opublikowanie plików JAR zależnych od Maven w folderze lib, gdy Eclipse opublikuje projekt na serwerze WST.

To podejście sprawdziło się.

+0

Zastanawiam się, gdzie ten interfejs wszedł w Eclipse - kiedyś zależność od modułu J2EE lub coś podobnego, dzięki! –

+1

piekło tak! dla wszystkich, którzy tu przychodzą. to jest poprawna odpowiedź! – Gleeb

+2

To nie działa dla mnie. Mam projekt internetowy A, który zależy od B poprzez pom.xml; "Zależności Mavena" są już wymienione w zespole rozmieszczania, podobnie jak B. Uwaga: ścieżka wdrożenia dla B to "WEB-INF/lib/B-0.1.0-SNAPSHOT.jar" i nie zmienia się w zależności od tego, czy B jest otwarte w Eclipse lub nie. Ścieżka budowania Eclipse zmienia się poprawnie (projekt Eclipse lub jar w moim repozytorium), aby odzwierciedlić, czy projekt jest otwarty, czy nie. Używam SpringSource Tool Suite 2.9.2.RELEASE. Nadal dostaję wyjątek ClassNotFoundException w środowisku wykonawczym, mimo że klasa rozwiązuje poprawnie w środowisku Eclipse. Stumped. – djb

4

Najprostszym sposobem poinformowania o tym, co Eclipse umieści w pliku wojny dla wdrożeń serwerów, jest kliknięcie prawym przyciskiem myszy -> Eksportuj -> plik WAR. Możesz następnie zdekompresować to i zobaczyć, co jest w środku.

Jeśli otworzy „.settings/org.eclipse.wst.common.component” powinieneś zobaczyć definicję webapp narzędzi internetowych i zobaczyć coś takiego:

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

na swojej drodze budowania w Eclipse, upewnij się, że "Maven Dependencies" pojawia się w Bibliotekach. Ostatnie wersje wtyczki m2eclipse i WST powinny automatycznie pobierać zależności Mavena i umieszczać je w WEB-INF/lib w pliku wojny.

Wreszcie, warto rozważyć pobranie najnowszej kopii SpringSource Tool Suite (STS). STS ma wiele dobrych funkcji, w tym łączenie najnowszych m2eclipse i WST. Nadal można go używać z Tomcat (lub jego wersją Tomcat), a także posiada pewne archetypy i tutoriale, dzięki którym aplikacja internetowa działa szybko.

Ciesz się!

0

Dodaj te pliki (w zależności od tego uwalniają zdarzy ci się być używany) do

apache-tomcat-8.0.35\lib 

folderu (i zrestartować serwer):

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