在pom.xml中为Tomcat 7设置Servlet / JSP jar

时间:2012-12-21 01:09:58

标签: eclipse tomcat maven servlets

我正在使用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的版本

http://mvnrepository.com/

请帮助我...

3 个答案:

答案 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;服务器运行时。