gpt4 book ai didi

java - ant:需要帮助将 EJB 及其依赖项打包到 EAR 中

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:18:40 33 4
gpt4 key购买 nike

我的目标非常简单:使用 ant 构建一个包含 1 个 EJB 和 1 个包含所有依赖项的 jar 的 EAR。这个 jar,为了示例而称为 common.jar,其中包含供应商 jar 文件以及 EJB 所依赖的其他 xml 文件,并且需要能够在运行时看到....

到目前为止,我已将所有内容正确打包为 EAR,如下所示:

EARFILE.ear
-EJBFILE.jar
/META-INF
-MANIFEST.MF
-common.jar
/META-INF
-MANIFEST.MF
/lib
-(all vendor jars inside here)
-(All the xml config files are inside the root of the common.jar)

EJBFILE.jar 的 MANIFEST.MF 内部是...

Class-path: ../../common.jar

common.jar 的 MANIFEST.MF 内部是...

Class-path: ../lib/some_common.jar

当我部署它时,当我尝试启动服务器时,appserver (websphere) 找不到 JAR 文件。我收到 ClassDefNotFoundError,因为当我尝试启动实例时,EJB 中的类无法找到供应商 JAR 文件。但是我知道 common.jar 设置正确,否则 EJB 不会编译,因为它需要在 javac 的类路径中包含这些供应商 jar。

所以我想知道的是:

  1. 如何让运行时正确查看供应商 jar 文件。
  2. EJB 能否在运行时看到 xml 文件?我对此很担心,因为这些 xml 文件位于 EJB 之外的一个 jar 中,而这个 jar 位于 EAR 中,它甚至不是一个模块,它只是 EAR 中的一个 jar。
  3. 使用 websphere 有关系吗?据我所知,一些容器甚至不关心 MANIFEST.MF 类路径中的内容。

最佳答案

基于遇到类似的问题,我可以提出一些改进建议。

  1. 首先也是最重要的一点,使用 Ant ear 任务的 appxml 属性来指定您的 deployment descriptor (通常命名为 application.xml);还包括对如下定义的捆绑的供应商 JAR 文件的引用
  2. 我建议您不要将供应商 JAR 文件放入另一个 JAR - 相反,只需将它们复制到与 EJBFILE.jar
  3. 相同级别的 EAR 中
  4. 配置 XML 文件可以放在 EJBFILE.jar 的子目录中(例如 config),然后您可以将它们引用为 /配置/文件名.xml.

application.xml 文件将告诉 WebSphere 在哪里可以找到您的 JAR 文件。应用服务器中的类路径遍历与编译器中的类路径遍历不同,JBoss 以惨痛的方式教会了我这一点。

我正在使用上述所有模式,并且我的容器内代码(部署在 EAR 中)可以查看我的所有 XML 文件,以及找到我的所有依赖项。

关于java - ant:需要帮助将 EJB 及其依赖项打包到 EAR 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3464044/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com