Пример архитектуры наследования и агрегирования Maven

У меня вопрос, как лучше всего реструктурировать ряд отдельных проектов Maven, используя комбинацию наследования и агрегации.

Настройка сцены:

  • Существуют 3 проекта Maven на основе кода, разработанные одной и той же командой.
  • 1 проект - это API, давайте назовем его project-api.
  • Два других проекта - это веб-приложения, использующие project-api. Назовем их web-app1 и web-app2.

Все три проекта имеют несколько общих базовых зависимостей, таких как log4j и junit. Помимо этого, web-app1 и web-app2 зависят от project-api, а также имеют ряд дополнительных общих зависимостей между ними.

Я читал https://books.sonatype.com/mvnref-book/reference/pom-relationships-sect-pom-best-practice.html , я просто хочу подтвердить что я понимаю передовой опыт.

Наследование:

Имеет ли смысл для меня создать родительский POM на уровне организации, который включает в себя зависимости (управление зависимостями), общие для всех трех проектов, а также некоторые параметры среды и общую информацию о проекте. Намерение состоит в том, что все проекты Maven (не обязательно напрямую) наследуются от этого POM.

Имеет ли мне смысл создать еще один родительский POM, который включает в себя зависимости (управление зависимостями), которые являются общими для web-app1 и web-app2, и от этого POM унаследованы только web-app1 и web-app2. Я думаю, что этот POM (назовем его родительским POM веб-приложения) должен быть дочерним POM родительского POM организационного уровня.

Агрегация:

С точки зрения агрегации, я не хочу создавать ни одного артефакта в конце дня. Скорее, я хочу запустить одну команду сборки Maven (вероятно, на уровне организационной POM) для сборки трех проектов в следующем порядке:

  1. project-api
  2. web-app1
  3. web-app2

Это означает, что родительский POM организации объявляет модули:

  1. project-api
  2. родительский POM веб-приложения

И родительский POM веб-приложения объявляет модули:

  1. web-app1
  2. web-app2

Обратите внимание, что родительский POM веб-приложения и родительский POM организации не имеют связанного кода. Я считаю, что это нормально, отмечая: «Фактически, в мире Maven проект вообще не должен содержать никакого кода, а просто pom.xml». взято из http://maven.apache.org/pom.html .

Наконец, как мне обеспечить соблюдение нужного мне порядка сборки? Например. Создание организационной родительской POM приведет к созданию project-api, и эта последняя сборка будет использоваться для создания веб-приложений1 и веб-приложений2?

Я надеюсь, что это не слишком запутанно, с удовольствием уточню, есть ли дополнительная информация требуется. Не стесняйтесь сказать мне, если я ошибаюсь! Спасибо.

14
задан Pedro 4 September 2018 в 12:58
поделиться