【问题标题】:java.lang.NoClassDefFoundError: javax/servlet/ServletContextListenerjava.lang.NoClassDefFoundError: javax/servlet/ServletContextListener
【发布时间】:2013-08-14 18:29:42
【问题描述】:

我正在尝试将 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和common logging

没有构建错误,但是在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 集成

谢谢, 飞马

【问题讨论】:

  • 是的,我将两个 jar 的范围都更改为“已提供”,并在清理了 tomcat 工作目录后尝试运行。我遇到了同样的错误。
  • 你能把你完整的pom粘贴到这里吗?
  • 是的,我已经在上面发布了我的 pom 文件

标签: eclipse maven tomcat7


【解决方案1】:

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

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

    <scope>provided</scope>

【讨论】:

  • 是的,我确实给出了“提供”的范围,但我仍然有问题
【解决方案2】:

servlet-api 是一个典型的依赖关系示例,它应该具有provided 范围,请参阅Introduction to dependency mechanism

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-14
    • 2023-01-12
    • 2012-02-09
    • 2016-02-09
    • 1970-01-01
    • 2023-04-08
    • 2021-10-20
    • 1970-01-01
    相关资源
    最近更新 更多