2012-04-02 25 views
5

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í

Respuesta

7

Bajo el Eclipse Propiedades del proyecto, seleccione conjunto de despliegue de la navegación menú que define "estructura de empaque para este proyecto de aplicación web Java EE". Asegúrese de tener todas las dependencias del proyecto agregadas aquí ..

O busque en el directorio del servidor web en workspace/.metadata/.plugins/org.eclipse.wst.server.core \ tmp0 para verificar si los archivos jar se han copiado a catalina base.

+0

Ensamblaje de despliegue Tengo dos entradas: ** (1) ** FUENTE =/src/main, RUTA DE DEPLOY = WEB-INF/classes ** (2) ** SOURCE =/WebContent, DEPLOY PATH =/ –

+2

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

+0

Después de agregar "Dependencias Maven" al "Conjunto de implementación", todo funciona de nuevo. ¡Gracias! –

1

Parece que no tienen todos los frascos en su carpeta de destino listos para desplegarse en Tomcat

intente ejecutar un paquete experto en Eclipse, haga clic derecho en el proyecto, ejecutar como paquete experto

Cuestiones relacionadas