Jakarta ee Glassfish-部署两个相互依赖的罐子

Jakarta ee Glassfish-部署两个相互依赖的罐子,jakarta-ee,glassfish,Jakarta Ee,Glassfish,我是JavaEE的新手,所以这可能是一个愚蠢的问题。但我将在Glassfish 3.1中部署一个WAR和一个包含EJB的JAR。服务器。WAR在JAR文件中引用了一个EJB。为了实现这一点,必须在WAR文件的lib目录中包含EJB JAR吗?因为WAR和JAR都将在同一个应用服务器上运行,所以我希望我不需要处理这些依赖关系。但是,如果WAR不包含EJB JAR(即使EJB JAR已经部署在应用服务器上),则在部署WAR时会遇到java.lang.NoClassDefFoundError。您是否尝

我是JavaEE的新手,所以这可能是一个愚蠢的问题。但我将在Glassfish 3.1中部署一个WAR和一个包含EJB的JAR。服务器。WAR在JAR文件中引用了一个EJB。为了实现这一点,必须在WAR文件的
lib
目录中包含EJB JAR吗?因为WAR和JAR都将在同一个应用服务器上运行,所以我希望我不需要处理这些依赖关系。但是,如果WAR不包含EJB JAR(即使EJB JAR已经部署在应用服务器上),则在部署WAR时会遇到
java.lang.NoClassDefFoundError

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


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

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


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

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

这与熟悉JavaSE开发的人“知道”的情况相比是一个重大的变化。对于大多数JavaSE程序,容器是JVM进程

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

这可能会为你澄清情况

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

JavaEE的基石之一是,不同的组件可以在不共享名称空间的容器中运行,即使这些组件可能在同一个JVM中运行。如果您有需要共享名称空间的模块,则需要将它们捆绑到EAR中(在JavaEE6之前)或组合到单个WAR中(JavaEE6为需要利用EJB的web应用程序建立了一个特例)

这与熟悉JavaSE开发的人“知道”的情况相比是一个重大的变化。对于大多数JavaSE程序,容器是JVM进程

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

这可能会为你澄清情况

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