eclipse java.lang.NoClassDefFoundError: javax/servlet/ServletContextListener
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/18239503/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
java.lang.NoClassDefFoundError: javax/servlet/ServletContextListener
提问by user2632444
Im trying to integrate spring with JSF and I added the following in web.xml,
我试图将 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>
I have also added spring-web and common logging in my tomcat classpath in eclipse
我还在 Eclipse 的 tomcat 类路径中添加了 spring-web 和通用日志记录
There are no build errors , but while running on tomcat 7 im getting the following error,
没有构建错误,但是在 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)
and
和
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)
These are my settings,
这些是我的设置,
There is a servlet-api jar in tomcat lib
In my Pom.xml I have given
<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>
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>
I have tried commenting out the entry in pom.xml also this also but no luck. Any help will be appreciated.
我也试过注释掉 pom.xml 中的条目,这也是,但没有运气。任何帮助将不胜感激。
This is my 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>
and the other thing I have noticed is the jar files which gets copied during deployment. Im running the project in tomcat 7 in eclipse. This is the entries in deployment assembly /src WEB-INF/classes /WebContent / JSF 2.1 (Apache MyFaces 2.1.5) WEB-INF/lib
我注意到的另一件事是在部署期间复制的 jar 文件。我在 Eclipse 中的 tomcat 7 中运行该项目。这是部署程序集 /src WEB-INF/classes /WebContent / JSF 2.1 (Apache MyFaces 2.1.5) WEB-INF/lib 中的条目
is it ok? or do I have to add maven dependencies also?.but on adding maven dependencies a error mark appears on the project and on maven -> project update. The cross error and the maven dependency entry also disappears on update. Wel, I am trying to integrate JSF with spring
可以吗?还是我还必须添加 maven 依赖项?。但是在添加 maven 依赖项时,项目和 maven -> 项目更新上会出现错误标记。交叉错误和 maven 依赖项也会在更新时消失。好吧,我正在尝试将 JSF 与 spring 集成
Thanks, Pegasus
谢谢,飞马
回答by saurav
As a standard practice you should not bundle any servlet related jars with your war file , let your app server (in your case it is tomcat) provide the required classes at runtime.
作为标准做法,您不应将任何与 servlet 相关的 jar 与您的 war 文件捆绑在一起,让您的应用服务器(在您的情况下是 tomcat)在运行时提供所需的类。
Change the scope to provided ,bundle your war file again and try to deploy.
将范围更改为提供的,再次捆绑您的War文件并尝试部署。
<scope>provided</scope>
回答by Robert Scholte
The servlet-api is a classic example of a dependency which should have the provided
scope, see Introduction to dependency mechanism.
servlet-api 是应该具有provided
范围的依赖项的经典示例,请参阅依赖机制简介。