10

因此,我从一个从 Eclipse 正确构建和调试的 Web 服务项目(只是一个动态 Web 项目)开始。我们已经提取了一大块想要放入共享库的通用代码,所以现在这些类将进入 Web 项目引用的单独 jar 项目中。

在 web 项目上,我做了 Project->Properties->Java Build Path->Projects->Add 并添加了 jar 项目。这正确地解决了所有编译时类路径问题,并且一切正常。但是在运行时,当 tomcat 服务器启动时,spring 尝试注入 jar 文件中包含的一些类,我得到一个 NoClassDefFoundError。

我的 .class 和属性文件以及 META-INF 目录的内容显示在 ./build 目录中,但我的 WEB-INF/lib 目录似乎被就地引用,并且 jar 依赖项没有被复制在其中显示为 Web 应用程序库的一部分。

告诉eclipse另一个jar项目需要在运行时对tomcat可用的神奇咒语是什么?从我们的 ant 构建脚本中,我们首先将另一个项目构建到 WEB-INF/lib 中,一切正常,但不适用于 Eclipse 调试。

4

2 回答 2

10

我花了一些时间后才弄清楚这一点。如果您在 Eclipse Helios 中,请转到properties > deployment assembly > add > project并选择您要添加的依赖项目。

于 2011-10-26T19:51:56.343 回答
9

Java EE 模块依赖可以解决这个问题。您已经完成了将公共类提取到自己的项目中的任务,可能是因为其他项目依赖于这些类。无论哪种方式,您都必须确保这是一个实用程序项目(出现在项目向导中的 Java EE 下),而不仅仅是一个普通的 Java 项目。完成后,您可以继续将 Utility 项目添加到您的构建路径(编译时路径),如您所想。

额外的(最后)步骤是在您的动态 Web 项目和共享库之间建立 Java EE 模块依赖关系,这会导致实用程序的类在部署期间放置在 WEB-INF\lib 中,甚至在 WAR 导出期间。为此,请访问动态 Web 项目的属性,并浏览到 Java EE 模块依赖项。确保在此处选择您的实用程序项目。重新部署/发布您的应用程序,您应该一切顺利。

于 2008-11-28T21:44:43.853 回答