gpt4 book ai didi

java - eclipse tomcat 为什么它不断复制 servlet api jar

转载 作者:行者123 更新时间:2023-11-28 22:35:05 25 4
gpt4 key购买 nike

我正在使用 eclipse 并添加了 tomcat 6 服务器。每当我尝试启动服务器时,它会自动将服务器 api jar 复制到 WEBINF/lib 文件夹中,并且应用程序不会启动

INFO: validateJarFile(/media/01CB9CAC704E03A0/Projects/.metadata/.plugins/org.eclipse.wst.server.core/tmp1/wtpwebapps/myapp/WEB-INF/lib/servlet-api-2.5.jar) - jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending class: javax/servlet/Servlet.class

最佳答案

我遇到了同样的问题,在查看其他页面后终于让它工作了。我将在此处列出,以防其他人遇到同样的问题。

在我的例子中,myeclipse 项目是从一个 maven .pom 文件创建的,该文件将 JEE 1.5 文件列为“提供”范围,即这些文件将由容器(在我的例子中为 tomcat 6)提供。因此,如果我使用 Maven 创建一个 war 文件并将其放入 webapps 目录中,它就可以正常工作。每次进行更改时都这样做有点乏味,所以我决定采用爆炸式部署,那时我遇到了同样的问题。

由于项目文件是从 pom 文件创建的,所以这些依赖项进来了,但是 Eclipse 项目文件不会将这些识别为“已提供”并且不会被部署。当 TOMCAT 发现规范的两个实现时,它并不高兴:

“Servlet 规范 2.3 sec 9.7.2 推荐……容器用于在 WAR 中加载 servlet 的类加载器必须允许开发人员按照正常的 J2SE 语义使用 getResource 加载 WAR 中库 JAR 中包含的任何资源。它必须不允许 WAR 覆盖 J2SE 或 Java servlet API 类。进一步建议加载器不允许 WAR 中的 servlet 访问 Web 容器的实现类。还建议实现应用程序类加载器,以便类和资源WAR 中打包的类和资源优先于容器范围的库 JAR 中的类和资源加载。”

我试过上面的解决方案来更改我的部署程序集配置,但这并没有帮助,因为如果我选择“来自构建路径的 JARS”,这些 jars 会被捆绑在一起在菜单project properties/MyEclipse/Web/Deplyment/Configure workspace settings。我需要这样做,因为我还有其他依赖项 jar(容器未提供)。

解决方法:

  1. 我手动从构建路径的依赖项中删除了这些 jar。
  2. 相反,我添加了对用户库 - JAVA EE5 的依赖。
  3. 并且在部署配置中,我删除了从所需项目的用户库中导出 JARS 的选项。

YMMV。但无论如何,如果您阅读了上面的 servlet 规范定义,然后查看您工作区中的配置,您就可以解决问题。

希望这对您有所帮助。

关于java - eclipse tomcat 为什么它不断复制 servlet api jar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4783218/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com