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/