【问题标题】:Eclipse Web Project DependenciesEclipse Web 项目依赖项
【发布时间】:2010-12-14 04:19:10
【问题描述】:

这个问题是关于 Eclipse 开发的,我正在尝试在 Eclipse 中创建一个 Web 应用程序,问题是我没有将依赖项 jar 放到部署的存档中。

我创建了一个新的动态 Web 项目并将其链接到另一个 Java 项目。 Java 项目引用了一些第 3 方 jars(例如 Spring jars),但由于某些原因,在发布 web 项目时,我只在 war 的 lib 目录中获得 Java 项目 jar,没有 Java 项目依赖项(例如 Spring)。

换句话说,我有项目 A(Web 项目)依赖于项目 B(Java 项目),项目 B 依赖于 Spring jar。当我将 web 项目作为战争发布到 JBoss 时,只有项目 B 被打包到 jar 中(没有 spring jars)

我知道我可以用ant来做,我什至有这样的build.xml来构建整个应用程序,但我认为eclipse也可以为我执行打包任务。

我将Java项目添加到web项目中的Java EE模块依赖中。

我应该在 Java 项目构建路径属性中使用导出选项吗?我应该将Java项目的依赖项也添加到Web项目中吗?

我做错了什么?

编辑:我使用的是 Eclipse 3.5.1

【问题讨论】:

  • 同时考虑这个问题:stackoverflow.com/questions/1691553/….
  • 我已经看到了这个问题,在Java EE模块依赖项中添加依赖项并不能解决我的问题
  • 您可能还需要将 Spring jar 添加到 Web 项目的依赖项列表中。它们可能不是可传递的。

标签: java eclipse jakarta-ee web-project


【解决方案1】:
  1. 转到 Web 项目属性。
  2. 部署组件(左)。
  3. 添加 > 选择项目 > 选择您的 lib 项目 > 选中“将项目组装到 Web 应用程序的 WEB-INF/lib 文件夹中”如果未选中 > 完成。
  4. Java 构建路径(左)> 项目选项卡 > 添加... > 选择您的 lib 项目 > 确定
  5. Java 构建路径(左)> 订购和导出选项卡 > 选择您的 lib 项目。
  6. 保存
  7. 现在可以了。

【讨论】:

    【解决方案2】:

    我知道距离上一篇文章已经过去四年了,也许当时还没有这个选项,但是这对我有用:

    1. 转到 Web 项目->属性
    2. 部署程序集
    3. 使用“添加”按钮添加您的项目依赖项
    4. 转到项目->您所依赖的项目的属性
    5. Deployment Assembly
    6. 使用“添加”按钮添加项目的运行时库依赖项
    7. Web 项目->运行方式..->在服务器上运行,它对我有用

    请注意,步骤 4-6 意味着如果您使用 eclipse 构建 jar 文件,它现在将在该 jar 中包含您的依赖库。

    感谢 rodgarcialima 帮助我进入第 3 步。

    【讨论】:

    • 嗨,George,有没有其他方法可以将引用的项目库复制到 Web 项目中?
    • 我们构建war文件需要其他项目包含的时候怎么样?
    【解决方案3】:

    我将Java项目添加到web项目中的Java EE模块依赖中。

    如果目的是将other项目的依赖项(读取:JAR files/projects/etc)放入current项目的运行时类路径中,那么只需这种方式行不通。您需要配置 other 项目以export 其依赖项。它由构建路径属性中的 Order 和 Export 选项卡完成。希望这会有所帮助。

    【讨论】:

      【解决方案4】:

      还要注意 Eclipse WTP 上报告的这个错误,它有时会阻止您的依赖项部署到 WEB-INF/lib,即使您正确配置了所有内容。叹息。

      Bug 312897 - Deployment feature doesn't deploy classpath dependencies.

      据我了解,要在 Eclipse 的编译时使用 JAR 并确保它在应用服务器的运行时也可用,您:

      • 将 JAR 添加到构建路径中
      • 将 JAR 标记为导出的 EE 模块依赖项

      如果您需要正在使用的另一个项目所需的 JAR,我会亲自将它们列为构建路径中的显式依赖项,并将它们添加到导出的模块依赖项中。

      但是,当我在寻找我的 Eclipse 项目中出现 NoClassDefFound 错误的原因时偶然发现这篇文章时,请不要接受我的回答... ;)

      【讨论】:

        【解决方案5】:

        您应该在部署 Web 应用程序之前将其打包到 WAR 文件中。必须有一种方法可以告诉 Eclipse 您希望将哪些 JAR 文件放在 WEB-INF/lib 目录中。如果没有,请编写一个 Ant build.xml 来为您完成。

        您不应该在您的环境或应用服务器中修改任何类路径变量。正确的做法是创建一个合适的 WAR 文件。

        更新:我重新阅读了您的问题:

        但由于某些原因,在发布 Web 项目时,我只获得了 JBoss 的 lib 目录中的 java 项目 jar,没有其依赖项 jar(例如 Spring)。

        这是什么意思?你不应该在 JBOSS /lib 目录中放任何东西。 WAR 文件的全部意义在于它是一个包含所有依赖项的自包含工件。如果您尝试将内容写入 JBOSS /lib 目录,那么您做错了。

        WAR 文件需要进入您设置的域。无需更改应用服务器。

        【讨论】:

        • 我有一个 ant 脚本做得很好,问题是开发时间,我想从 eclipse 打包并发布它(然后当然调试应用程序)
        • Eclipse 应该能够在没有 Ant 的情况下做到这一点。如果不能,请获取一个真正的 IDE 并下载 IntelliJ。它完美地管理所有这些东西。
        • 你的更新是对的,我指的是war文件的lib目录(在WEB-INF下),当然不是JBoss lib目录。我修正了问题描述,谢谢。
        • @LiorH - 非常好,感谢您的解释。我不得不承认我很迷惑。你说你的 Ant 脚本“做得很好”,但你仍然有问题。如果我不明白到底发生了什么,要么你必须希望有一个更聪明的人来梳理答案或为你的问题添加更多细节。老实说,我不知道发生了什么。
        【解决方案6】:

        如果我对您的理解正确,问题是如果您使用项目 A,而项目 A 又依赖于项目 B,您不会从项目 B 获得工件,而只能从 A 获得工件。

        问题是您的项目必须在 Properties -> Java EE module dependencies 中列出它需要的所有东西,这是与通常的项目导出不同的机制。您可能需要进行一些实验。

        【讨论】:

          猜你喜欢
          • 2011-01-08
          • 1970-01-01
          • 2015-12-24
          • 1970-01-01
          • 2012-12-17
          • 2011-04-15
          • 1970-01-01
          • 2018-10-28
          • 2011-05-14
          相关资源
          最近更新 更多