我正在使用JDK 1.6,Maven 2.2.1,Tomcat 7和Eclipse Juno(企业版)。
尝试导入javax.servlet等包时。*; Eclipse抱怨道 它在类路径(构建路径)中没有它。
所以,我所做的是在我的pom.xml文件中包含以下依赖项:
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.3</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jsp-api</artifactId>
<version>2.0</version>
</dependency>
在tomcat服务器启动期间:
INFO: Deploying web application archive C:\DevTools\tomcat\apache-tomcat-7.0.32\webapps\myapp.war
Dec 20, 2012 4:55:41 PM org.apache.catalina.loader.WebappClassLoader validateJarFile
INFO: validateJarFile(C:\DevTools\tomcat\apache-tomcat-7.0.32\webapps\myapp\WEB-INF\lib\servlet-api-2.3.jar)
- jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending class: javax/servlet/Servlet.class
为什么要记录此消息?
另外,我似乎无法在maven资源库中找到适合servlet-api 3.0或jsp 2.2的版本
请帮助我...
答案 0 :(得分:8)
Web应用程序容器负责提供Servlet / JSP API和实现文件。使用当前的Maven设置,您将导致这些库文件捆绑在您的应用程序中,从而导致您在日志中看到的类加载器问题。
尝试导入javax.servlet等包时。*;日食 抱怨它在类路径(构建路径)中没有它。
是的,您需要在类路径中使用API库,以便编译依赖于它们的代码。您希望在 build 类路径中包含这些库,同时不将它们包含在最终的可部署中。您可以通过将依赖库的scope
标识为provided
来使用Maven执行此操作。这基本上意味着“编译时需要这些库,但最终将由应用程序容器提供,因此实际上不要将它们包含在可部署的中”。
另外,我似乎找不到适合servlet-api 3.0或者版本的版本 maven存储库中的jsp 2.2
Servlet 3.0和JSP 2.2 API已捆绑在通用的JavaEE Web API中。这是您需要在POM中指定的依赖项。所示:
<dependencies>
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-web-api</artifactId>
<version>6.0</version>
<scope>provided</scope>
</dependency>
</dependencies>
答案 1 :(得分:2)
Tomcat附带servet和jsp jar。所以你想要从war文件中排除它们。这可以通过指定provided范围来完成。
将<scope>provided</scope>
添加到两个依赖项中并再次尝试。
答案 2 :(得分:0)
您不应该将这些JSP和Servlet依赖项添加到项目中。 J2EE规范的实例化(例如servlet)应该由应用程序服务器的运行时提供。
在Eclipse中,为应用程序服务器添加服务器运行时。右键单击项目,然后选择“属性”。然后构建路径&gt;添加库&gt;服务器运行时。