0

在 Eclipse 中,我有两个项目,每个项目都装有 servlet。项目 A 在其构建路径中包含项目 B。

问题是这些项目中的每一个都需要 servlet-api.jar 才能编译,而当 Tomcat 还需要其库中的 servlet-api.jar 来运行项目 A 时,情况会变得更糟。

当我在项目 A 和项目 B 以及 Tomcat 的 WEB-INF/lib 文件夹中都有 servlet-api.jar 时,我在 javax.servlet.Servlet 上得到一个 ClassNotFoundException,因为 servlet-api.jar 的多个实例发生冲突。如果我从任何一个项目中删除 servlet-api.jar,它们将无法再识别 HTTPWebRequest 类,即使我将 servlet-api.jar 留在项目 B 中并将项目 B 留在项目 A 的构建路径中,servlet 在项目 A 仍然无法识别 HTTPWebRequest 类。

如果我从 Tomcat 中删除 servlet-api.jar,Tomcat 将无法再运行,并在 javax/servlet/http/HttpServletRequest 上引发 NoClassDefFoundError。似乎没有任何方法可以让这三个人一起工作,因为他们每个人都需要 servlet-api.jar 才能工作,但如果有多个,就会发生冲突。

先感谢您!

4

2 回答 2

1

在“服务器”视图中配置一个 tomcat 服务器(如果您还没有这样做)。在项目 A 和 B 中,转到 java build path -> Libraries。单击添加库-> 服务器运行时,然后选择 tomcat 运行时(您通过“服务器”视图配置)。以下链接为您提供更多信息。

在eclipse中添加tomcat作为服务器。 http://www.eclipse.org/webtools/jst/components/ws/M4/tutorials/InstallTomcat.html

于 2013-10-29T16:39:55.483 回答
0

事实证明,错误是由项目 B 中两个类中的 init 方法引起的。在花了几天时间尝试了所有可能的方法后,最终的解决方案是合并两个项目。

不起作用的事情包括:

  • 从任一项目、两个项目或 Tomcat 中删除 servlet-api.jar
  • 从项目 A 的构建路径中添加或删除项目 B(尽管这是编译 A 所必需的)
  • 在 Tomcat 的构建路径下添加项目 B(尽管它似乎确实有帮助)
  • 从 web.xml 中删除启动调用以防止调用 init() 方法(这允许 Tomcat 启动时没有任何错误,但随后项目无法运行

我们可能已经尝试了其他一些事情,但最终,删除项目 B 并将文件与 A 合并是让它工作的原因。

于 2013-10-30T14:59:07.997 回答