可以组合多个耳朵进行部署吗?

时间:2013-08-09 17:28:51

标签: maven ear maven-ear-plugin

我们的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. 使用maven版本号,例如payment-service-1.1.9.ear
  5. 理想情况下,我们可以使用单个EAR(或其他格式),我们可以一起进行版本和认证。我已经尝试将模块添加到父pom中,但这有助于同时构建所有单个EAR。

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

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

1 个答案:

答案 0 :(得分:1)

对我来说,听起来你应该选择带有多个网络模块的单耳。请参阅官方文档: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>
...

最后,包含所有网络模块的 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> 

基本上应该是这样。

此外,如果您想阻止在每个war webModuleX中打包付款服务(以减少最终耳朵档案的大小),请确保选择所谓的“瘦战”:{{ 3}}

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