ResumenEclipse + Maven + JavaServer Faces -> ClassNotFoundException: StartupServletContextListener
Cuando trato de ejecutar una aplicación JSF 2.0 desde dentro de Eclipse (en Tomcat 7.0) me sale el siguiente excepción:
Problem: SEVERE: Error configuring application listener of class org.apache.myfaces.webapp.StartupServletContextListener
java.lang.ClassNotFoundException: org.apache.myfaces.webapp.StartupServletContextListener
Detalles
Estoy aprendiendo a desarrollar aplicaciones JSF, usando Eclipse. que comenzó con un proyecto preconfigurado Eclipse: Archivo-> Nuevo-> Web Proyecto- dinámico> Java Server v2.0 Proyecto cara. Al usar este método, Eclipse proporciona todas las dependencias. Pero realmente quiero aprender cómo funciona todo. Quiero eliminar la "magia", así que convertí mi proyecto a un proyecto Maven: Configurar-> Convertir a proyecto Maven.
Entonces creé mi pom.xml (basado en http://myfaces.apache.org/build-tools/archetypes/myfaces-archetype-helloworld20/index.html), que contiene lo siguiente:
<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>
Pero porque estoy familiarizado con JSF, y porque se trata de un "Proyecto Web dinámica" Eclipse la estructura del proyecto es nueva para mí y tengo problemas para entender qué dependencias provienen de Maven y cuáles las proporciona la "magia" de Eclipse.
En Eclipse, la estructura de mi proyecto es el siguiente:
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
Problema Mi aplicación (muy básico) (página de inicio de sesión & página de bienvenida) ya no corre. Cuando hago lo siguiente:
(1) Right click on WebContent/login.xhtml
(2) Run as -> Run on Server
(3) Apache Tomcat v7.0 - JDK6 at localhost
tengo la excepción:
Problem: SEVERE: Error configuring application listener of class org.apache.myfaces.webapp.StartupServletContextListener
java.lang.ClassNotFoundException: org.apache.myfaces.webapp.StartupServletContextListener
tengo la sensación de que esto es muy fácil de solucionar, pero estoy demasiado familiarizado con estos marcos de trabajarlo fuera.
Si hay algunos detalles adicionales que debería proporcionar (web.xml, caras-config-xml, login.xhtml), que me haga saber y lo añadiremos.
Gracias!
EDITAR
WEB-INF/lib está siempre vacío. Según tengo entendido, es necesario copiar todas las dependencias en esta carpeta, que se necesitarán en tiempo de ejecución y que Web Container no proporciona. Las razones por las cuales el mío está vacío son: (1) No sé lo que necesito allí (2) No sé cómo automatizar el proceso de poner archivos .jar ahí
Ensamblaje de despliegue Tengo dos entradas: ** (1) ** FUENTE =/src/main, RUTA DE DEPLOY = WEB-INF/classes ** (2) ** SOURCE =/WebContent, DEPLOY PATH =/ –
Haga clic en el botón Agregar, seleccione Entradas Java BuildPath ... seleccione todo y agregue ... Este es el lugar donde eclipse selecciona todas las dependencias que se agregarán a WEB-INF/lib – vinodn
Después de agregar "Dependencias Maven" al "Conjunto de implementación", todo funciona de nuevo. ¡Gracias! –