问题

我正在运行一个Maven项目,它也是一个动态的Web项目。我在maven中使用了所有弹簧库。我创建了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

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


#1 热门回答(107 赞)

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

依赖应该是在Maven pom中的providedscope而不是defaultcompilescope:

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

#2 热门回答(21 赞)

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

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

  • 只需从lib目录中删除servlet.jar即可删除警告消息。
  • 如果在lib目录中找不到jar,请扫描构建路径并删除jar。
C:\Program Files\Apache Software Foundation\Tomcat 7.0\webapps\project\WEB-INF\lib

如果你正在运行maven项目,请在pom.xml中将javax.servlet-apidependency更改为scopeprovided,因为容器本身已经提供了servlet jar。


#3 热门回答(4 赞)

要解决此问题,请设置254961388至作为提供的**范围。这告诉Maven使用代码servlet-api.jar仅用于编译和测试,但不包括在WAR文件中。部署的容器将在运行时"提供"servlet-api.jar。

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

原文链接