【问题标题】:How should I define Pom.xml in each Module so that web module can communicate with the other two ejb modules?我应该如何在每个 Module 中定义 Pom.xml 以便 web 模块可以与其他两个 ejb 模块通信?
【发布时间】:2012-08-30 13:27:38
【问题描述】:

专家,专家,专家。一定很不错,小应用也不错。

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

我应该如何在每个Module中定义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>

【问题讨论】:

  • @ThorbjørnRavnAndersen 看看我以前做过什么:-)
  • 与您想要的相比,maven 构建的错误是什么?
  • @ThorbjørnRavnAndersen Die EJB 模块被打包到 WEB War und Ear 中。它存在两次。(在 War und in Ear 中)并且 Application Server 没有从 Module 数据中找到类

标签: java maven build


【解决方案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 (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 jars 可以从war 类加载器中获得。

【讨论】:

  • 你能解释一下你所说的吗??
  • @Kayser - 添加了更多内容。是否有一些具体的缺失/令人困惑?
  • 我有一个 JSF 项目。托管 Bean 在 WEB 模块中。他们在业务模块中调用业务外观。(通过注入)。托管 bean 使用分离的实体。目前两者的类型都是ejb。模块数据的类型应该是“jar”吗??
  • 我试过了。但是当类型为 ejb 时,maven 会忽略提供的标签。 :-(
猜你喜欢
  • 1970-01-01
  • 2021-12-25
  • 2021-09-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-21
  • 2012-08-23
相关资源
最近更新 更多