【问题标题】:How to include servlet-api.jar in my Java solution?如何在我的 Java 解决方案中包含 servlet-api.jar?
【发布时间】:2013-06-03 18:51:10
【问题描述】:

我有一个需要在我的类路径中包含 servlet-api.jar 的 Java 解决方案。

如果我将 servlet-api.jar 从我的 tomcat 文件夹复制到项目文件夹,它会起作用。但是当我升级到Java7时,servlet-api.jar是一个新版本,需要更换。

无论如何我可以解决这个问题吗?我不认为我可以将它直接指向我本地开发机器上的 tomcat 文件夹...

【问题讨论】:

  • 您的问题不清楚,您是否收到任何错误/消息?
  • @BalusC:如果只使用 Eclipse 编译项目,这可以正常工作,但如果使用真正的构建工具,则适当的 servlet api jar 必须以某种方式位于类路径中,并且如果依赖管理没有使用 Gradle、Ivy 或 Maven 之类的工具,jar 应该在项目中。只是不在部署的战争中。
  • @JBNizet:他提出问题的方式表明他在 webapp 自己的运行时类路径中拥有它,这绝对是 Wrong™。否则,我看不出为什么会提出这样一个奇怪的问题的任何合理的根本原因。像 Maven 这样的依赖管理工具不能这样工作。他们有自己的方式来管理独立于手动放置在项目中的 JAR 的依赖项。
  • 我同意。我的观点是,虽然您的链接答案很好地解释了如何使用 Eclipse 通过服务器配置来引用 servlet-api jar,但它没有解释当 eclipse 不在图片中时该怎么做(并且项目使用 ant,因为例如),它也没有解释如何解决 OP 问题:能够同时定位 Tomcat 6 和 Tomcat 7。

标签: java servlets classpath java-7


【解决方案1】:

问题不在于选择 Java 7 还是其他版本的 JDK。问题是:你想在你的 webapp 中使用哪个版本的 servlet API 规范。当然,这种选择也会对您可以使用的 servlet 容器产生影响。例如,如果您选择 servlet 3.0,则必须使用 Tomcat 7,而不是 Tomcat 6。

因此,首先选择您要使用的 API 版本(以及容器),然后将相应的 jar 添加到您的项目中,并在您的类路径中使用此 jar 进行构建。只需确保不要将此 jar 文件添加到已部署的 webapp 的 WEB-INF/lib 文件夹中。 jar 只能用于编译。在运行时,容器已经在它自己的类路径中有这个 jar。

【讨论】:

  • 我希望网站能够在安装了 Tomcat 6 或 7 的服务器上运行。是否可以在我的 Web 应用程序中完全不包含 jar?
  • 您部署的网络应用不得包含 jar 文件。您只能使用它来编译您的应用程序(我认为这很清楚,因为它已经在我的答案中大写了。所以我在这里用粗体重复)。由于您希望能够在 Tomcat 6 上部署应用程序,因此请使用 Tomcat 6 附带的 servlet-api.jar 来编译您的应用程序。 API 和 Tomcat 向后兼容,因此您的应用可以在 Tomcat 7 上正常运行,无需修改。
【解决方案2】:

我不喜欢用 servlet api jar 来满足 ant build。 比如说,我们从 Tomcat 6.0.42 迁移到 6.0.43 或 7.x.x。或者到 Glassfish。 有人必须确保从 tomcat 安装中获取最新的 jar 并在项目中替换它。

servlet-api.jar 重命名为servlet-api-tomcat-6.0.42.jar 可能是一种解决方案。它还可能向开发人员表明,当我们更改 Web 容器时必须更换它。 有更清洁的解决方案吗?

【讨论】:

    猜你喜欢
    • 2011-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-26
    • 2016-05-15
    • 1970-01-01
    • 2013-09-05
    • 1970-01-01
    相关资源
    最近更新 更多