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

时间:2010-08-12 01:14:28

标签: java ant jar websphere packaging

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

1 个答案:

答案 0 :(得分:1)

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

  1. 首先,最重要的是,使用Ant appxml任务的ear属性来指定您的deployment descriptor(通常命名为application.xml);还包括对如下定义的捆绑的供应商JAR文件的引用
  2. 我建议您不要将供应商JAR文件放入另一个JAR中 - 而是将它们复制到与EJBFILE.jar
  3. 相同的EAR中。
  4. 配置XML文件可以放在EJBFILE.jar的子目录中(例如config),然后您可以将它们引用为/config/filename.xml
  5. application.xml文件将告诉WebSphere在哪里找到您的JAR文件。应用程序服务器中的类路径遍历与编译器的类路径遍历不同,JBoss很难教会我。

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