2012-04-02 13 views
5

PodsumowanieEclipse + Maven + JavaServer Faces -> ClassNotFoundException: StartupServletContextListener

Kiedy próbuję uruchomić aplikację JSF 2.0 od wewnątrz Eclipse (na Tomcat 7.0) pojawia się następujący wyjątek:

Problem: SEVERE: Error configuring application listener of class org.apache.myfaces.webapp.StartupServletContextListener 
java.lang.ClassNotFoundException: org.apache.myfaces.webapp.StartupServletContextListener 

Szczegóły

Uczę się rozwijać aplikacje JSF, używając Eclipse. Rozpocząłem od prekonfigurowanego projektu Eclipse: Plik-> Nowy-> Dynamiczny projekt WWW-> Projekt JavaServer Face v2.0. Korzystanie z tej metody Eclipse zapewnia wszystkie zależności. Ale naprawdę chcę się nauczyć, jak wszystko działa. Chcę usunąć "magię", więc skonwertowałem swój projekt do projektu Maven: Configure-> Convert to Maven project.

Następnie tworzone mojego pom.xml (w oparciu o http://myfaces.apache.org/build-tools/archetypes/myfaces-archetype-helloworld20/index.html), zawiera następujące elementy:

<build> 
    <finalName>jsf-facelets-tutorial</finalName> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-war-plugin</artifactId> 
      <configuration> 
       <webXml>WebContent/WEB-INF/web.xml</webXml> 
      </configuration> 
     </plugin> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <configuration> 
       <source>1.6</source> 
       <target>1.6</target> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 
<dependencies> 
    <dependency> 
     <groupId>javax.el</groupId> 
     <artifactId>el-api</artifactId> 
     <version>1.0</version> 
     <scope>provided</scope> 
    </dependency> 
    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>4.0</version> 
     <scope>test</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.myfaces.core</groupId> 
     <artifactId>myfaces-api</artifactId> 
     <version>2.0.5</version> 
     <scope>compile</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.myfaces.core</groupId> 
     <artifactId>myfaces-impl</artifactId> 
     <version>2.0.5</version> 
     <scope>runtime</scope> 
    </dependency> 
</dependencies> 

Ale ponieważ jestem zaznajomiony z JSF, a ponieważ jest to Eclipse "Dynamic Project Web" Struktura projektu jest dla mnie nowością i nie rozumiem, które zależności pochodzą od Mavena i które są dostarczane przez "magię" Eclipse.

W Eclipse, mój struktury projektu jest następujący:

ProjectName 
    JAX-WS Web Services <-- CAN I REMOVE THIS??? 
    Deployment Descriptor 
    Java Resources 
    src/main 
    Libraries 
     Apache Tomcat v7.0 
     el-api.jar 
     jsp-api.jar 
     [more...] 
     JSF 2.0 (Apache MyFaces JSF Core-2.0 API 2.0.2) <-- I REMOVED THIS!!! 
     EAR Libraries 
     JRE System Library 
     Maven Dependencies 
     el-api-1.0.jar 
     myfaces-api-2.0.5.jar 
     myfaces-impl-2.0.5.jar 
     [more...] 
     Web App Libraries 

Problem Mój (bardzo podstawowy) aplikacji (strona logowania & strona powitalna) już nie działa. Kiedy należy wykonać następujące czynności:

(1) Right click on WebContent/login.xhtml 
(2) Run as -> Run on Server 
(3) Apache Tomcat v7.0 - JDK6 at localhost 

otrzymuję wyjątek:

Problem: SEVERE: Error configuring application listener of class org.apache.myfaces.webapp.StartupServletContextListener 
java.lang.ClassNotFoundException: org.apache.myfaces.webapp.StartupServletContextListener 

mam wrażenie, że jest to bardzo łatwe do naprawienia, ale jestem zbyt obeznany z tych ram, aby go pracować na zewnątrz.

Jeśli są dodatkowe informacje, które powinienem podać (web.xml, faces-config-xml, login.xhtml), daj mi znać, a dodam je.

Dzięki!

EDIT

WEB INF/lib zawsze pusta. Z mojego punktu widzenia konieczne jest skopiowanie wszystkich zależności do tego folderu, które będą wymagane w środowisku wykonawczym i które nie są dostarczane przez kontener sieciowy. Powody, dla których moje są puste, są następujące: (1) Nie wiem, czego potrzebuję (2) Nie wiem, jak zautomatyzować proces umieszczania plików .jar tam

Odpowiedz

7

Pod Eclipse Properties projektu, wybierz Assembly rozmieszczania z nawigacji menu, które definiuje "strukturę opakowania dla tego projektu aplikacji WWW Java EE". Upewnij się, że masz tutaj wszystkie zależności projektowe.

Albo zajrzyj do katalogu serwera sieciowego w obszarze roboczym/.metadata/.plugins/org.eclipse.wst.server.core \ tmp0, aby sprawdzić, czy słoiki zostały skopiowane do bazy Catalina.

+0

W zestawie wdrażania Mam dwa wpisy: ** (1) ** SOURCE =/src/main, DEPLOY PATH = WEB-INF/classes ** (2) ** SOURCE =/WebContent, DEPLOY PATH =/ –

+2

Kliknij przycisk dodawania, wybierz pozycję Java BuildPath. Wybierz wszystko i dodaj. To jest miejsce, w którym zaćmienie wybiera wszystkie zależności, które mają zostać dodane do WEB-INF/lib – vinodn

+0

Po dodaniu "Zależności Maven" do "Assembly Deployment" wszystko działa jeszcze raz. Dzięki! –

1

Wygląda na to, że nie wszystkie słoiki w folderze docelowym gotowe do wdrożenia do kocur

Spróbuj uruchomić pakiet maven w Eclipse, kliknij prawym przyciskiem na projekt prowadzony jako pakietu maven

Powiązane problemy