我的目标很简单:使用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。
所以我想知道的是:
答案 0 :(得分:1)
基于遇到类似问题,我可以提出一些改进建议。
appxml
任务的ear
属性来指定您的deployment descriptor(通常命名为application.xml
);还包括对如下定义的捆绑的供应商JAR文件的引用EJBFILE.jar
EJBFILE.jar
的子目录中(例如config
),然后您可以将它们引用为/config/filename.xml
。 application.xml
文件将告诉WebSphere在哪里找到您的JAR文件。应用程序服务器中的类路径遍历与编译器的类路径遍历不同,JBoss很难教会我。
我正在使用上述所有模式,我的容器内代码(部署在EAR中)可以查看我的所有XML文件,以及查找所有依赖项。