【问题标题】:Difference between Deployment Assembly and J2EE Module Dependencies in EclipseEclipse 中部署组件和 J2EE 模块依赖关系的区别
【发布时间】:2012-06-22 23:20:32
【问题描述】:

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

我有一个 JavaProject 依赖项。我已经通过 classpath 变量添加了所有依赖的罐子。现在 Dependencies 项目作为依赖项添加到我的 Web 项目 TestWebProject。 Web 项目的编译是正确的,但在运行时我得到一个错误,因为没有找到一些 jar。我可以在 Dependencies 项目的部署程序集中解决这个问题,这是一个独立的项目。

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

【问题讨论】:

  • 不确定为什么会这样,正确的过程是将 Dependencies 作为元素添加到 TestWebProject 的部署程序集中。你试过这样做吗?

标签: java eclipse jakarta-ee eclipse-indigo eclipse-3.5


【解决方案1】:

我在 google 上可以找到,了解到它类似于 J2EE Module 依赖项

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


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

因为这样 Eclipse 会自动构建项目的 JAR 文件并放入 web 项目部署的/WEB-INF/lib。如果您不这样做,则 JAR 在 webapp 的运行时不可用,但仅在编译时可用,并且 Eclipse 期望您已经构建并将其放置在运行时类路径中的任何其他位置,例如服务器自己的/lib


如果我没有这个部署程序集,怎么能解决这个问题?

手动构建/导出 JAR 并放入 webapp 自己的 /WEB-INF/lib 或服务器自己的 /lib。然而,“部署程序集”配置更简单,也是推荐的方式。

另见:

【讨论】:

    【解决方案2】:

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

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

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

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

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

    【讨论】:

      【解决方案3】:

      构建路径 - 将您的 jar 直接放在这里,它将可用于代码运行时和编译时。

      部署程序集 - eclipse 期望此路径下的项目被捆绑并部署为 web-inf/lib 文件夹中的 .jar。因此它可用于编译时和运行时。如果项目未部署在部署程序集中,则代码仅可用于编译时,eclipse 不会捆绑它,并且在运行时依赖项目对代码不可用。

      【讨论】:

        猜你喜欢
        • 2015-12-28
        • 2019-01-11
        • 2021-10-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-11-16
        • 1970-01-01
        • 2022-01-11
        相关资源
        最近更新 更多