java - Eclipse + Maven + JavaServer Faces -> ClassNotFoundException : StartupServletContextListener

标签 java eclipse jsf tomcat maven

总结

当我尝试从 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 项目开始: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 ),它包含以下内容:

<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 文件放在那里的过程

最佳答案

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

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

关于java - Eclipse + Maven + JavaServer Faces -> ClassNotFoundException : StartupServletContextListener,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9973599/

相关文章:

java - 在不使用 selectOneMenu 的情况下从 XHTML 访问 JSF SelectItem.Label 和 Value

java - 从 JSP 检索值到 Javascript

java - 违反 Big-O 表示法中给定的平均时间复杂度

Android项目报错! "Conversion to Dalvik format failed with error 1"

javascript - 你如何在 Eclipse 中附加 JSdoc 以便我可以自动完成个人图书馆

java.lang.UnsupportedOperationException 在 javax.faces.context.FacesContext.isReleased(FacesContext.java :609)

java - JSF 1.1 中的面板弹出窗口

java - 如何在 RapidMiner 扩展中记录第 3 方输出?

java - while循环忽略try-catch

java - 为什么运行时依赖的类在编译时可用?