Eclipse + Maven + JavaServer Faces -> ClassNotFoundException: StartupServletContextListener
Posted
技术标签:
【中文标题】Eclipse + Maven + JavaServer Faces -> ClassNotFoundException: StartupServletContextListener【英文标题】: 【发布时间】:2012-04-15 22:42:43 【问题描述】:总结
当我尝试从 Eclipse(在 Tomcat 7.0 上)运行 JSF 2.0 应用程序时,出现以下异常:
Problem: SEVERE: Error configuring application listener of class org.apache.myfaces.webapp.StartupServletContextListener
java.lang.ClassNotFoundException: org.apache.myfaces.webapp.StartupServletContextListener
详情
我正在学习使用 Eclipse 开发 JSF 应用程序。 我从一个预配置的 Eclipse 项目开始:文件->新建->动态 Web 项目->JavaServer Face v2.0 项目。 使用这种方法 Eclipse 提供了所有依赖项。但我想真正了解一切是如何运作的。我想去除“魔法”,所以我将我的项目转换为 Maven 项目:Configure->Convert to Maven project。
然后我创建了我的 pom.xml(基于 http://myfaces.apache.org/build-tools/archetypes/myfaces-archetype-helloworld20/index.html),它包含以下内容:
<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>
但是因为我不熟悉 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文件放在那里的过程
【问题讨论】:
【参考方案1】:听起来您的目标文件夹中的所有 jar 都没有准备好部署到 tomcat
尝试在eclipse中运行一个maven包,右键项目,作为maven包运行
【讨论】:
【参考方案2】:在您的 Eclipse 项目属性下,从定义“此 Java EE Web 应用程序项目的打包结构”的导航菜单中选择部署程序集。确保您在此处添加了所有项目依赖项..
或者查看workspace/.metadata/.plugins/org.eclipse.wst.server.core\tmp0下的web server目录,检查jars是否已经复制到catalina base。
【讨论】:
在部署程序集中我有两个条目:(1) SOURCE = /src/main , DEPLOY PATH = WEB-INF/classes (2) 源 = /WebContent ,部署路径 = / 点击添加按钮,选择 Java BuildPath Entries.. 全选并添加.. 这是 eclipse 选择要添加到 WEB-INF/lib 的所有依赖项的地方 在将“Maven 依赖项”添加到“部署程序集”之后,一切都会再次运行。谢谢!以上是关于Eclipse + Maven + JavaServer Faces -> ClassNotFoundException: StartupServletContextListener的主要内容,如果未能解决你的问题,请参考以下文章