Glassfish - 部署两个具有相互依赖关系的JAR

时间:2011-05-20 14:54:37

标签: java-ee glassfish

我是Java EE的新手,所以这可能是一个虚拟问题。但我正在将一个包含EJB的WAR和JAR部署到Glassfish 3.1。服务器。 WAR引用了JAR文件中的一个EJB。是否必须将EJB JAR包含在WAR文件的lib目录中才能使其工作?由于WAR和JAR都将在同一个应用服务器上运行,我希望我不需要处理这些依赖关系。但是,如果我没有包含EJB JAR,那么在部署WAR时我得到java.lang.NoClassDefFoundError(即使EJB JAR已经部署在应用服务器上)。

2 个答案:

答案 0 :(得分:4)

Java EE的一个基石是不同组件可以在不共享命名空间的容器中运行的概念,即使这些组件可能在同一个JVM中运行。如果您有需要共享命名空间的模块,则需要将它们捆绑到EAR中(在Java EE 6之前)或组合成单个WAR(由Java EE 6为需要利用EJB的Web应用程序建立的特殊情况) 。

这是熟悉Java SE开发人员“知道”的重大变化。对于大多数Java SE程序,容器是JVM进程。

因此,您的问题的答案是,“不。您不需要将EJB jar放在WAR文件的lib目录中。您可以创建一个包含BOTH档案的EAR文件。”

这可能会为你澄清情况......

 myEar.ear
   + myEJBs.jar
   + myWAR.war
   + lib
       + a-jar-that-has-classes-used-in-both-archives-above.jar

答案 1 :(得分:1)

您是否尝试将WAR和JAR文件一起打包到EAR文件中? EAR文件可以有一个lib目录,您可以在其中放置要在企业应用程序的类路径FBO上加载的JAR文件。

这应解决您的类加载器问题。