Eclipse + Maven + JavaServer Faces – > ClassNotFoundException:StartupServletContextListener

概要

当我尝试从Eclipse(在Tomcat 7.0上)运行JSF 2.0应用程序时,我得到以下exception:

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

细节

我正在学习使用Eclipse开发JSF应用程序。 我从一个预先配置的Eclipse项目开始:File-> New-> Dynamic Web Project-> JavaServer Face v2.0 Project。 使用此方法Eclipse提供所有依赖项。 但我想真正了解一切是如何运作的。 我想删除“魔术”,所以我将我的项目转换为Maven项目:Configure-> Convert to Maven project。

然后我创建了我的pom.xml(基于http://myfaces.apache.org/build-tools/archetypes/myfaces-archetype-helloworld20/index.html ),它包含以下内容:

  jsf-facelets-tutorial   org.apache.maven.plugins maven-war-plugin  WebContent/WEB-INF/web.xml    org.apache.maven.plugins maven-compiler-plugin  1.6 1.6       javax.el el-api 1.0 provided   junit junit 4.0 test   org.apache.myfaces.core myfaces-api 2.0.5 compile   org.apache.myfaces.core myfaces-impl 2.0.5 runtime   

但是因为我不熟悉JSF,并且因为这是一个Eclipse“动态Web项目”,所以项目结构对我来说是新的,我无法理解哪些依赖项来自Maven,哪些是由Eclipse提供的“魔法” ”。

在Eclipse中,我的项目结构如下:

 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 

问题我的(非常基本的)应用程序(登录页面和欢迎页面)不再运行。 当我执行以下操作时:

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

我得到了例外:

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

我觉得这很容易解决,但是我对这些框架太熟悉了。

如果我应该提供任何其他详细信息(web.xml,faces-config-xml,login.xhtml),请告诉我,我会添加它们。

谢谢!

编辑

WEB-INF / lib始终为空。 根据我的理解,有必要将所有依赖项复制到此文件夹中,这在运行时是必需的,而Web容器不提供这些依赖项。 我的空的原因是:(1)我不知道我需要什么(2)我不知道如何自动化将.jar文件放在那里的过程

在eclipse Project Properties下,从导航菜单中选择Deployment Assembly,它定义了“此Java EE Web应用程序项目的打包结构”。 确保您在此处添加了所有项目依赖项。

或者查看workspace / .metadata / .plugins / org.eclipse.wst.server.core \ tmp0下的web服务器目录,检查是否已将jar复制到catalina base。

听起来你没有准备好部署到tomcat的目标文件夹中的所有jar

尝试在eclipse中运行maven包,右键单击项目,作为maven包运行