【问题标题】:ant: Need help packaging an EJB and its dependencies into an EARant:需要帮助将 EJB 及其依赖项打包到 EAR 中
【发布时间】:2010-08-12 01:14:27
【问题描述】:

我的目标非常简单:使用 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 之外的 EAR 中的 jar 内,它甚至不是一个模块,它只是 EAR 中的一个 jar。
  3. 在使用 websphere 时这是否重要?从我收集到的一些容器甚至不关心 MANIFEST.MF 的类路径中的内容。

【问题讨论】:

    标签: java ant jar websphere packaging


    【解决方案1】:

    根据遇到的类似问题,我可以提出几项改进建议。

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

    application.xml 文件将告诉 WebSphere 在哪里可以找到您的 JAR 文件。应用服务器中的类路径遍历与编译器不同,这是 JBoss 教给我的艰难方法。

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

    【讨论】:

    • 嗯,我不知道你可以在 application.xml 中包含 jars 作为非模块?
    • 如果 JAR 文件位于 EAR 的根目录中,您只需添加每个文件名(和 EJBFILE.jar)作为模块引用。 JAR 文件的模块类型为java。
    • 您不需要将库 jar 声明为模块类型“java”;这将使它们成为应用程序客户端 jar。只需在 EJB MANIFEST.MF 中列出它们。例如,类路径:util.jar
    猜你喜欢
    • 1970-01-01
    • 2011-12-18
    • 1970-01-01
    • 2015-04-30
    • 1970-01-01
    • 2019-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多