9

在为 Java EE 开发人员使用 Eclipse 3.7 Indigo 时,有一个叫做Deployment Assembly的东西。我可以在 google 上找到并了解它类似于 J2EE 模块依赖项,我们可以在其中选择 jar,并且在 WAR 的情况下它位于 EAR 文件夹或 WEB-INF/lib 中。现在我的疑问是,

我有一个 JavaProject Dependencies。我已经通过类路径变量添加了所有依赖的罐子。现在Dependencies Project 作为依赖项添加到我的 Web 项目TestWebProject中。Web 项目的编译是正确的,但是在运行时我得到一个错误,因为没有找到一些 jar。我可以在一个独立项目的 Deployment Assembly of Dependencies项目中修复我的包含 jar 。

问题是,为什么我必须在部署程序集中修复 jar,因为首先,它是一个独立项目,其次是如果我没有这个部署程序集,如何解决?

4

3 回答 3

16

我可以在 google 上找到并了解它类似于 J2EE 模块依赖项

在 Eclipse 3.5 之前,它被称为“J2EE 模块依赖项”。在那个版本之后,它被重命名为“部署程序集”。但在 Java EE Web 项目的情况下,它实际上是相同的。


问题是,为什么我必须在部署程序集中修复 jar,因为它是一个独立项目

Because this way Eclipse will autobuild a JAR file of the project and put in /WEB-INF/lib of the web project's deployment. If you don't do that, the JAR isn't available during webapp's runtime, but only during compiletime and Eclipse expects that you've already built and placed it anywhere else in runtime classpath, e.g. server's own /lib.


if I would not have this deployment assembly , how could this be fixed?

Manually build/export the JAR and drop in webapp's own /WEB-INF/lib or server's own /lib. The "Deployment Assembly" configuration is however more easy and the recommended way.

See also:

于 2012-06-20T19:05:17.663 回答
5

组装 WAR 时,Eclipse 无法仅通过查看构建路径依赖关系来判断它们是否应该捆绑在 WAR 的 WEB-INF/lib 目录中,或者它们是否是您希望在服务器类路径中可用的东西。需要额外的元数据来区分这些情况。

如果您查看问题视图,您应该会看到许多如下所示的警告:

“类路径条目 [something] 将不会被导出或发布......”

右键单击这些并选择“快速修复”。您将看到一个包含可用修复的对话框。其中一个会说“将关联的类路径条目标记为发布/导出依赖项......”。使用该选项。

以上将对您的 Java 项目的 .classpath 文件进行轻微更改,以标记依赖项以包含在程序集中。通过导出 WAR 文件并检查 WEB-INF/lib 文件夹的内容,您可以在不运行的情况下进行测试。

于 2012-06-20T19:04:41.493 回答
1

Build path - place your jar's here directly, it will be available for code runtime and compile time.

Deployment assembly - eclipse expects the projects under this path to be bundled and deployed as .jar in web-inf/lib folder. So that it is available for both compile time and run time. If the project is not deployed in deployment assembly then the code is available only for compile time, eclipse won't bundle it and at run-time dependent projects are unavailable to the code.

于 2015-07-27T08:01:34.503 回答