Вопрос

У меня есть следующие настроенные проекты Maven:

  • PM-Ядро
  • PM-Web (с зависимостью от PM-Core)
Сейчас этот проект используется для нескольких клиентов, но для каждого клиента есть некоторые небольшие различия:в основном различия в файлах конфигурации, но некоторым клиентам также требуются дополнительные файлы java (которые могут быть не установлены для других клиентов).

Я рассматривал несколько альтернатив того, как поддержать это с помощью maven, но все еще ищу идеальное решение.

Лучшее решение, которое я могу придумать, - это создать отдельный проект maven для каждого клиента (напримерPM-CLIENT1, ...), который содержит только файлы конфигурации для конкретного клиента и дополнительные файлы java или jsp, ....Следующим шагом было бы рассмотреть проект PM-Web и клиентский проект как один веб-проект, что означает:пусть они будут объединены (упакованы) в 1 файл war с файлами из клиентского проекта, имеющими приоритет над файлами из проекта PM-Web.

Более конкретный:Выполняется mvn package на PM-Client1 можно было бы взять все из PM-Web, добавить / заменить файлы из PM-Client1, а затем упаковать это в один war.

Итак, вопрос в том,:как добиться этого с помощью maven?

Это было полезно?

Решение

Да, это можно сделать с помощью Накладки.Образец на веб-странице - это именно то, о чем вы говорите.

Для структуры проекта у вас могло бы быть что-то вроде этого:

.
|-- PM-Core
|-- PM-WebCommon (of type war, depends on core)
|-- PM-Client1 (of type war, depends on webcommon)
`-- PM-Client2 (of type war, depends on webcommon)

И используйте overlay в PM-Client1 и PM-Client2, чтобы "объединить" их с PM-WebCommon и package wars для каждого клиента.

Обновить Я не буду раскрывать все детали, но я думаю, что объявление зависимости war с областью действия типа runtime требуется при использовании overlay, вот как работает overlay (на самом деле, вся эта штука с overlay - своего рода хак).Теперь, чтобы решить вашу проблему с eclipse, одним из решений было бы создать JAR, содержащий классы проекта PM-WebCommon.Для этого используйте attachClasses необязательный параметр и установите его равным true.Это подскажет maven создать PM-WebCommon-<version>-classes.jar который затем вы сможете объявить как зависимость в PM-Client1 (с provided сфера применения).Для получения подробной информации взгляните на МВАР-73 и МВАР-131.Это также обсуждается в Вопросы и ответы из плагина war.Обратите внимание, что это не рекомендуемая практика, правильным способом было бы перенести классы в отдельный модуль (и это другое решение, о котором я хотел упомянуть).

Обновить (201001018):Я пробовал attachClasses параметр и он работает с версией 2.1-beta-1 плагина.

Другие советы

Вы могли бы использовать профили видишь http://maven.apache.org/guides/mini/guide-building-for-different-environments.html и использовать классификаторы чтобы различать артефакты из разных сборок для одной и той же версии.В этой настройке вы могли бы создать дополнительные необязательные модули для каждой из конкретных настроек ваших клиентов в рамках родительского проекта, т. е.
+ ПМ
++ PM-Ядро
++ PM-Веб
++ PM-Клиент1
++ PM-Клиент2

Или вы могли бы посмотреть на использование use the плагин сборки maven

Сравните также ответы на вопрос различные файлы ВОЙНЫ, общие ресурсы .

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top