问题
我正在运行一个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中的provided
scope而不是defaultcompile
scope:
<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-api
dependency更改为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>