Можно ли объединить несколько ушей для развертывания?

У нас есть 12 ушных файлов на нашем уровне SOA, мы индивидуально разворачиваем эти EAR в JBoss. У нас все чаще возникают проблемы с управлением зависимостями и развертыванием всех этих файлов EAR.

Каждый EAR - это:

  1. построен с использованием Maven и Maven-Ear-плагин
  2. содержит веб-модуль для доступа RESTful, например payment-rs/payment
  3. имеет такой API, как payment-api-1.1.9.jar, который часто зависит от других EAR
  4. использует номера версий maven, такие как payment-service-1.1.9.ear

В идеале, мы могли бы иметь один EAR (или какой-то другой формат), который мы могли бы совместно проверять и подтверждать. Я попытался добавить модули в родительский pom, но это просто облегчает создание всех отдельных EAR одновременно.

Есть ли способ как-то объединить эти EAR-файлы?

Если ответ "нет", есть идеи, если мы "делаем это неправильно" с нашей архитектурой? Должны ли мы объединить проекты? Решить проблемы с зависимостями API другим способом?

1 ответ

Решение

Для меня это звучит так, как будто вы должны пойти на одно ухо с несколькими веб-модулями. Смотри официальные документы: http://maven.apache.org/plugins/maven-ear-plugin/modules.html

Поскольку вы по-прежнему используете SOA, веб-службы могут взаимодействовать друг с другом через любой определенный интерфейс, просто развертывание может быть значительно упрощено.

Ваш проект 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 (чтобы уменьшить размер окончательного архива ушей), обязательно используйте так называемые "тощие войны": http://maven.apache.org/plugins/maven-ear-plugin/examples/skinny-wars.html

Не стесняйтесь спрашивать подробно, если некоторые из предложений неясны или неточны.

Другие вопросы по тегам