Мавен:Объединять веб-проекты
-
20-09-2019 - |
Вопрос
У меня есть следующие настроенные проекты Maven:
- PM-Ядро
- PM-Web (с зависимостью от PM-Core)
Я рассматривал несколько альтернатив того, как поддержать это с помощью 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
Сравните также ответы на вопрос различные файлы ВОЙНЫ, общие ресурсы .