java - 我应该如何在每个模块中定义Pom.xml,以便web模块可以与其他两个ejb模块通信?

标签 java maven build

Maven,Maven,Maven。它一定非常好,而且通过一个小应用程序就很好了。

现在我想构建一个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 --> 业务模块。商业立面就在这里。类型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>

最佳答案

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

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

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

更新:

我可能误解了你的问题(自从我完成 Java EE 的工作以来也已经有一段时间了)。我认为您可能只需要将 war 模块中的“基本”依赖项标记为范围“提供”,例如:

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

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

关于java - 我应该如何在每个模块中定义Pom.xml,以便web模块可以与其他两个ejb模块通信?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12201225/

相关文章:

css - Webpack - 如何进行简单的 css 缩小和连接

java - 我可以将 Android 应用程序转换为 iPhone/iPad 应用程序吗?

java - 如何更新 SQLite 数据库(登录和注册系统)中的密码?

java - 将具有 IntelliJ 依赖项的 java maven 项目导出为非 maven 项目

java - intellij 正在将 src 复制到目标

java.lang.ClassNotFoundException org.hibernate.engine.jdbc.connections.spi.MultiTenantConnectionProvider

c++ - 如何使用 Visual C++ 在 Windows 上构建通用数学模板库

java - fatal :unable to update url base from redirection. ..无法解决

java - 在 Java 中使用 BufferedWriter 格式化双输出

ffmpeg - 编译 ffmpeg Ubuntu 16