Выполнение цели плагина только один раз в многомодульном проекте

#maven

#maven

Вопрос:

Я пытаюсь запустить и остановить базу данных, используя fabric8io/docker-maven-plugin , и я получил это для работы, используя pre-integration-test post-integration-test фазы и.

Проблема в том, что в многомодульном проекте запуск контейнера базы данных занимает 3-4 секунды, и он запускается и останавливается для каждого модуля.

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

Структура выглядит примерно так:

  • родительский
    • дочерний элемент-a
      • sub-parent-b
        • модуль-а
        • модуль-b
        • модуль-c
    • дочерний элемент-c

Я попытался запустить что-то подобное mvn clean docker:start@integration-db-start verify docker:stop@integration-db-stop , но запускает цели для каждого модуля.

Я пытался определить плагин и его execution в parent/pom.xml с inherited=false помощью, но если я запускаю maven в sub-parent-a или ниже, конфигурация не найдена, я предполагаю, потому что она больше не наследуется.

В моих поисках я обнаружил, что плагин может работать так, как я хочу, если он помечен как aggregator плагин, например javadoc , но я не думаю, что смогу что-то сделать для существующего плагина.

Есть ли какой-либо способ, который я упустил из виду?

Спасибо

Комментарии:

1. Я предлагаю внимательно изучить testcontainers.org это позволит просто запустить контейнер в рамках модульного / интеграционного теста… Использование этой настройки на самом деле не сработает…

2. Я попробовал это, используя их собственный драйвер JDBC и tc URL, но для запуска образа PostgreSQL Docker требуется больше времени, чем с fabric8io/docker-maven-plugin , и первоначальная проблема остается… он запускает один экземпляр для каждого модуля Maven.

3. Запуск контейнера PostgreSQL docker занимает 2-5 секунд. Если вы пишете такого рода интеграционные тесты, то это те расходы, которые вам придется оплатить. Но вы уверены, что у вас есть только один и что-то не изменилось в вашем postgres с помощью любого другого теста, противоречащего решению с запуском его только один раз…

4. В текущей настройке используется фактический экземпляр PG, который должен быть установлен локально каждым разработчиком, и я пытался это изменить, но команде было бы сложнее продать, если я скажу им, что сборка займет еще 80 секунд (20 модулей x 4 секунды). Я думал, что мог бы создать свой собственный Моджо, который расширил StartMojo бы от docker-maven-plugin и просто пометил его aggregator=true

5. Вы не могли бы, потому что mojo привязан к жизненному циклу, который здесь не поможет … кроме того, такой интеграционный тест должен выполняться только на CI, а не локально, только в исключительных случаях, если есть ошибка, на которую нужно охотиться…