【问题标题】:Setting up Servlet / JSP jars in pom.xml for Tomcat 7在 pom.xml 中为 Tomcat 7 设置 Servlet/JSP jar
【发布时间】:2012-12-08 14:37:58
【问题描述】:

我正在使用 JDK 1.6、Maven 2.2.1、Tomcat 7 和 Eclipse Juno(企业版)。

尝试导入 javax.servlet.* 等包时;日食抱怨 它的类路径(构建路径)中没有它。

所以,我所做的是在我的 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/

请帮帮我...

【问题讨论】:

    标签: eclipse tomcat maven servlets


    【解决方案1】:

    Web 应用程序容器负责提供 Servlet/JSP API 和实现文件。使用您当前的 Maven 设置,您会导致这些库文件捆绑在您的应用程序中,从而导致您在日志中看到的类加载器问题。

    尝试导入 javax.servlet.* 等包时;蚀 抱怨它的类路径(构建路径)中没有它。

    是的,您需要类路径中的 API 库才能编译依赖它们的代码。您希望将这些库包含在您的 build 类路径中,同时不将它们包含在最终部署中。您可以通过将依赖库的scope 标识为provided 来使用Maven 执行此操作。这基本上意味着“编译需要这些库,但最终将由应用容器提供,因此实际上不要将它们包含在可部署中”。

    另外,我似乎找不到适合 servlet-api 3.0 或 jsp 2.2 在 maven 仓库中

    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>
    

    【讨论】:

      【解决方案2】:

      Tomcat 带有servet 和jsp jar。因此,您希望将它们从您的战争文件中排除。这可以通过指定provided 范围来完成。

      &lt;scope&gt;provided&lt;/scope&gt; 添加到两个依赖项中,然后重试。

      【讨论】:

      • 如果想使用不同版本的 servlet(Tomcat 服务器中已经存在的除外),需要做什么?或者不能使用不同版本的servlet?
      【解决方案3】:

      您不应该将这些 JSP 和 Servlet 依赖项添加到您的项目中。 J2EE 规范的实例化(例如 servlet)应由应用程序服务器的运行时提供。

      在 Eclipse 中,为您的应用程序服务器添加服务器运行时。右键单击项目并选择属性。然后构建路径 > 添加库 > 服务器运行时。

      【讨论】:

        猜你喜欢
        • 2012-03-26
        • 1970-01-01
        • 2012-09-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-10-18
        • 2011-11-24
        • 1970-01-01
        相关资源
        最近更新 更多