0

我们的 SOA 层中有 12 个 ear 文件,我们将这些 EAR 单独部署到 JBoss。我们越来越难以管理依赖项以及所有这些 EAR 文件的部署。

每个 EAR 是:

  1. 使用 Maven 和 maven-ear-plugin 构建
  2. 包含一个用于 RESTful 访问的 webModule,例如 payment-rs/payment
  3. 有一个类似 payment-api-1.1.9.jar 的 API,它通常依赖于其他 EAR
  4. 使用像 payment-service-1.1.9.ear 这样的 Maven 版本号

理想情况下,我们可以有一个单一的 EAR(或其他格式),我们可以一起进行版本和认证。我尝试将模块添加到父 pom,但这只是有助于同时构建所有单独的 EAR。

有没有办法以某种方式组合这些 EAR 文件?

如果答案是否定的,关于我们的架构是否“做错了”有什么想法吗?我们应该合并这些项目吗?以其他方式解决 API 依赖问题?

4

1 回答 1

1

对我来说,听起来你应该选择使用多个 Web 模块的单耳。查看官方文档:http ://maven.apache.org/plugins/maven-ear-plugin/modules.html

由于您仍将使用 SOA,因此 Web 服务可以通过定义的任何接口相互通信,因此可以显着简化部署。

您的项目pom.xml可能如下所示:

WebModuleA类似pom.xml

<groupId>???</groupId>
<artifactId>webModuleA</artifactId>
<version>???</version>
<type>war</type>

<dependencies>
  <dependency>
    <groupId>???</groupId>
    <artifactId>payment-service</artifactId>
    <version>1.1.9</version>
    <type>jar</type>
  </dependency>
...

webModuleB类似pom.xml

<groupId>???</groupId>
<artifactId>webModuleB</artifactId>
<version>???</version>
<type>war</type>

<dependencies>
  <dependency>
    <groupId>???</groupId>
    <artifactId>payment-service</artifactId>
    <version>1.1.9</version>
    <type>jar</type>
  </dependency>
...

支付服务pom.xml如:

<groupId>???</groupId>
<artifactId>payment-service</artifactId>
<version>1.1.9</version>
<type>jar</type>
...

最后是包含所有 Web 模块的earModule :

<groupId>???</groupId>
<artifactId>earModule</artifactId>
<version>???</version>
<type>ear</type>

<dependencies>
  <dependency>
    <groupId>???</groupId>
    <artifactId>webModuleA</artifactId>
    <version>???</version>
    <type>war</type>
  </dependency>
  <dependency>
    <groupId>???</groupId>
    <artifactId>webModuleB</artifactId>
    <version>???</version>
    <type>war</type>
  </dependency>
...

<plugin>
    <artifactId>maven-ear-plugin</artifactId>
    <version>2.8</version>
    <configuration>
      <modules>
        <webModule>
          <groupId>???</groupId>
          <artifactId>webModuleA</artifactId>
        </webModule>
        <webModule>
          <groupId>???</groupId>
          <artifactId>webModuleA</artifactId>
        </webModule>
    ...
      </modules>
    </configuration>
  </plugin> 

基本上应该是这样的。

此外,如果您想防止在每个warwebModuleX 中打包支付服务(以减少最终耳朵存档的大小),请确保进行所谓的“瘦身大战”:http ://maven.apache.org/插件/maven-ear-plugin/examples/skinny-wars.html

如果某些建议不清楚或不准确,请随时详细询问。

于 2013-08-09T19:11:13.890 回答