Можно ли объединить несколько ушей для развертывания?
У нас есть 12 ушных файлов на нашем уровне SOA, мы индивидуально разворачиваем эти EAR в JBoss. У нас все чаще возникают проблемы с управлением зависимостями и развертыванием всех этих файлов EAR.
Каждый EAR - это:
- построен с использованием Maven и Maven-Ear-плагин
- содержит веб-модуль для доступа RESTful, например payment-rs/payment
- имеет такой API, как payment-api-1.1.9.jar, который часто зависит от других EAR
- использует номера версий 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
Не стесняйтесь спрашивать подробно, если некоторые из предложений неясны или неточны.