罐子没装.请参阅Servlet规范2.3,第9.7.2节.违规类:javax/servlet/Servlet.class

dre*_*der 98 java eclipse maven tomcat7

我正在运行一个Maven项目,它也是一个动态的Web项目.我在Maven中使用了所有Spring库.我创建了web.xml,但是当我启动我的Tomcat 7服务器时,我收到以下消息:

INFO: validateJarFile(C:\Users\mibvzd0\workspace\.metadata\.plugins\
org.eclipse.wst.server.core\tmp2\wtpwebapps\hapi_hl7\WEB-INF\lib\
servlet-api-2.4.jar) - jar not loaded.
See Servlet Spec 2.3, section 9.7.2. Offending class: javax/servlet/Servlet.class
Run Code Online (Sandbox Code Playgroud)

我尝试删除servlet webapp/lib,但它没有用.让我知道在我的案例中应该做些什么.

JB *_*zet 112

servlet API .jar文件不能嵌入到webapp中,因为很明显,容器在其类路径中已经有这些类:它实现了这个jar中包含的接口.

依赖项应该在Maven pom 的provided范围内,而不是默认compile范围:

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.1.0</version>
    <scope>provided</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)

  • 也许你有一个依赖,它具有对另一个servlet jar版本的传递依赖.使用mvn dependency:tree查找此servlet jar的来源,并添加一个排除项. (6认同)

Luc*_*cky 21

当servlet api jar文件已经加载到容器中并且您尝试再次从lib目录加载它时,会收到此警告消息.

Servlet规范说你不能在你的webapps 目录中拥有servlet.jarlib.

  • 只需servlet.jarlib目录中删除即可删除警告消息.
  • 如果您没有在lib目录中找到jar,那么请扫描构建路径并删除jar.

C:\Program Files\Apache Software Foundation\Tomcat 7.0\webapps\project\WEB-INF\lib
Run Code Online (Sandbox Code Playgroud)

如果您正在运行maven项目,请将javax.servlet-api依赖项更改为providedpom.xml中的scope ,因为容器本身已经提供了servlet jar.