eclipse - java.lang.NoClassDefFoundError : javax/servlet/ServletContextListener

标签 eclipse maven tomcat7

我正在尝试将 spring 与 JSF 集成,我在 web.xml 中添加了以下内容,

<listener>  
<listener-class>
   org.springframework.web.context.ContextLoaderListener
</listener-class>  
</listener>  

<listener> 
<listener-class>
 org.springframework.web.context.request.RequestContextListener
</listener-class>    
</listener> 

我还在 eclipse 的 tomcat 类路径中添加了 spring-web 和通用日志记录

没有构建错误,但在 tomcat 7 上运行时出现以下错误,

  java.lang.NoClassDefFoundError: javax/servlet/ServletContextListener
at java.lang.ClassLoader.findBootstrapClass(Native Method)
at java.lang.ClassLoader.findBootstrapClassOrNull(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)

   java.lang.NoClassDefFoundError: javax/servlet/ServletRequestListener
at java.lang.ClassLoader.findBootstrapClass(Native Method)
at java.lang.ClassLoader.findBootstrapClassOrNull(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)

这些是我的设置,

  • tomcat lib中有一个servlet-api jar

  • 在我的 Pom.xml 中我给出了

    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>servlet-api</artifactId>
        <version>2.5</version>
        <scope>compile</scope>
    </dependency> 
    
     and            
        <dependency>
            <groupId>javax</groupId>
            <artifactId>javaee-api</artifactId>
            <version>6.0</version>
        </dependency> 
    

我也尝试过注释掉 pom.xml 中的条目,但没有成功。 任何帮助将不胜感激。

这是我的 pom.xml,

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>TimeTracker</groupId>
<artifactId>TimeTracker</artifactId>
<version>0.0.1-SNAPSHOT</version>

<repositories>
    <repository>
        <id>prime-repo</id>
        <name>PrimeFaces Maven Repository</name>
        <url>http://repository.primefaces.org</url>
    </repository>

    <repository>
<id>Java.Net</id>
<url>http://download.java.net/maven/2/</url>
 </repository>
</repositories>

<dependencies>
    <dependency>
        <groupId>commons-io</groupId>
        <artifactId>commons-io</artifactId>
        <version>1.3.2</version>
    </dependency>
    <dependency>
        <groupId>commons-fileupload</groupId>
        <artifactId>commons-fileupload</artifactId>
        <version>1.2.2</version>
    </dependency>

    <!-- J2ee -->

          <dependency>
            <groupId>javax</groupId>
            <artifactId>javaee-api</artifactId>
            <version>6.0</version>
             <scope>provided</scope> 
        </dependency> 

    <!-- Spring framework -->

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-web</artifactId>
        <version>3.2.3.RELEASE</version>
        <scope>provided</scope>
    </dependency> 

<!-- JSR-330 -->
     <dependency>
        <groupId>javax.inject</groupId>
        <artifactId>javax.inject</artifactId>
        <version>1</version>
    </dependency> 

    <!-- PrimeFaces -->
    <dependency>
        <groupId>org.primefaces</groupId>
        <artifactId>primefaces</artifactId>
        <version>3.5</version>
    </dependency>


    <!-- JSF -->
    <dependency>
        <groupId>com.sun.faces</groupId>
        <artifactId>jsf-api</artifactId>
        <version>2.1.13</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>com.sun.faces</groupId>
        <artifactId>jsf-impl</artifactId>
        <version>2.1.13</version>
        <scope>provided</scope>
    </dependency>

     <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>jstl</artifactId>
        <version>1.2</version>
        <scope>provided</scope>
    </dependency> 

      <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>servlet-api</artifactId>
        <version>2.5</version>
        <scope>provided</scope>
    </dependency> 

     <dependency>
        <groupId>javax.servlet.jsp</groupId>
        <artifactId>jsp-api</artifactId>
        <version>2.1</version>
    </dependency>

    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>servlet-api</artifactId>
        <version>2.5</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>jstl</artifactId>
        <version>1.2</version>
        <scope>provided</scope>
    </dependency>
</dependencies>
<build>
    <sourceDirectory>src</sourceDirectory>
    <plugins>
        <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.1</version>
            <configuration>
                <source>1.6</source>
                <target>1.6</target>
            </configuration>
        </plugin>
    </plugins>
</build>

我注意到的另一件事是在部署期间复制的 jar 文件。我在 eclipse 中的 tomcat 7 中运行该项目。这是部署程序集中的条目 /src WEB-INF/类 /网页内容 / JSF 2.1(Apache MyFaces 2.1.5)WEB-INF/lib

还好吗?或者我还必须添加 Maven 依赖项吗?但是在添加 Maven 依赖项时,项目和 Maven -> 项目更新上会出现错误标记。交叉错误和 Maven 依赖项也会在更新时消失。嗯,我正在尝试将 JSF 与 spring 集成

谢谢, 飞马座

最佳答案

作为标准做法,您不应将任何 servlet 相关的 jar 与您的 war 文件捆绑在一起,让您的应用服务器(在您的情况下是 tomcat)在运行时提供所需的类。

将范围更改为提供的,再次捆绑您的 war 文件并尝试部署。

    <scope>provided</scope>

关于eclipse - java.lang.NoClassDefFoundError : javax/servlet/ServletContextListener,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18239503/

相关文章:

java - 无法解析org.apache.commons:commons-lang3:3.0对等方未通过身份验证的gradle 2.2.1

java - 如何在 eclipse java 应用程序中添加 java 参数以及类路径?

git - HTTPS 的 Maven JGitFlow 插件身份验证

java - 部署 WAR 包 TOMCAT

java - 找不到 Tomcat 7 setenv.sh

mysql - 如何在JSP中从mysql获取 bool 值?

java - 无法在 Eclipse ide 中打开 SDK 管理器

java - 使用 Spring 精简布局强制将本地存储库中的 lib 包含到 JAR 中

hibernate - 使用 Hibernate,catalina.out 的大小迅速增加

Java Servlet API - 如何在不提交响应的情况下设置响应状态和原因短语