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

use*_*201 0 java eclipse tomcat

我正在使用 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
Run Code Online (Sandbox Code Playgroud)

Mas*_*ief 5

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

\n\n

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

\n\n

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

\n\n

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

\n\n

我尝试使用上述解决方案来更改我的部署程序集配置,但这单独没有帮助,因为如果我在菜单项目属性/MyEclipse/Web/Deplyment/Configure 工作区中选择“来自构建路径的 JARS”,这些 jar 就会被捆绑在一起设置。\n我需要这样做,因为我有其他依赖项 jar(容器未提供)。

\n\n

解决方案:

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

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

\n\n

希望这可以帮助。

\n