0

马文,马文,马文。它必须非常好,并且通过一个小应用程序就很好。

现在我要构建一个ear 项目:用两个EJB 模块、一个web 模块和ear 模块来构建一个ear 文件。Web 模块依赖于其他 ejb 模块..

我应该如何在每个模块中定义 Pom.xml 以便 web 模块可以与 ear 中的其他两个 ejb 模块进行通信,并且 ear 模块构建正确的 ear 文件?

我之前做过的事情:

模块 1 --> 基本模块。所有其他模块都依赖于此模块。登录等基本功能。

<packaging>ejb</packaging>

模块 1 --> 数据模块。所有实体都在这里类型 EJB

<dependency>
    <groupId>com.myCompnay</groupId>
    <artifactId>Modul_Basic</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <type>ejb</type>
</dependency

模块 2 --> 业务模块。Businnes Facades 在这里。类型 EJB

<dependency>
    <groupId>com.myCompnay</groupId>
    <artifactId>Modul_Basic</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <type>ejb</type>
</dependency            

Web 模块 -> 类型为 WAR

<dependency>
        <groupId>com.myCompnay</groupId>
        <artifactId>Modul_Basic</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <type>ejb</type>
    </dependency

EAR 模块 --> 在这个项目中,我尝试构建项目。

<packaging>ear</packaging>

    <dependencies>
            <dependency>
        <groupId>com.myCompnay</groupId>
        <artifactId>Modul_Basic</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <type>ejb</type>
    </dependency
            <dependency>
        <groupId>com.myCompnay</groupId>
        <artifactId>Modul_Business</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <type>ejb</type>
    </dependency
    <dependency>
        <groupId>com.myCompnay</groupId>
        <artifactId>Modul_WEB</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <type>war</type>
    </dependency

</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-ear-plugin</artifactId>               
        </plugin>
    </plugins>
</build>
4

1 回答 1

1

您应该有一个单独的 jar 模块,其中包含您的 ejb 接口和相关的接口对象(即您的 ejb API)。(顺便说一句,这个问题与 maven 无关,使用任何构建系统都会遇到同样的问题)。您当前的设置有 4 个模块(2 个 ejb、1 个战争、1 个耳朵)。相反,您应该有 5 个模块:

  • EJB API (jar):只是 ejb 接口和这些接口中使用的可能数据对象
  • EJB A,B (ejb):ejb 实现,依赖于 API jar
  • WEB(战争):取决于 API jar,而不是ejb jar
  • EAR(耳朵):取决于ejbs和war。

这是典型的客户端/服务器设置。您的服务器通常由一个“公共 API”模块和一个“实施”模块组成。“公共 API”将分发给任何客户端实现。

更新:

我可能误解了你的问题(我已经有一段时间没有做过 Java EE 的东西了)。我认为您可能只需要将您的战争模块中的“基本”依赖项标记为“已提供”范围,例如:

<dependency>
    <groupId>com.myCompnay</groupId>
    <artifactId>Modul_Basic</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <type>ejb</type>
    <scope>provided</scope>
</dependency>

这将允许您针对类进行编译,但 ejb jar 不会包含在战争中。我相信ejb jar 可以从 war 类加载器中获得。

于 2012-08-30T16:28:50.883 回答