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
W zestawie wdrażania Mam dwa wpisy: ** (1) ** SOURCE =/src/main, DEPLOY PATH = WEB-INF/classes ** (2) ** SOURCE =/WebContent, DEPLOY PATH =/ –
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
Po dodaniu "Zależności Maven" do "Assembly Deployment" wszystko działa jeszcze raz. Dzięki! –