#maven
#maven
Вопрос:
Я пытаюсь запустить и остановить базу данных, используя fabric8io/docker-maven-plugin
, и я получил это для работы, используя pre-integration-test
post-integration-test
фазы и.
Проблема в том, что в многомодульном проекте запуск контейнера базы данных занимает 3-4 секунды, и он запускается и останавливается для каждого модуля.
Я пытался запустить / остановить это только один раз за выполнение Maven, независимо от того, с чего я это начинаю (с основного модуля агрегации или другого субмодуля агрегации более низкого уровня или даже для одного из реальных модулей), но я не могу найти способ.
Структура выглядит примерно так:
- родительский
- дочерний элемент-a
- sub-parent-b
- модуль-а
- модуль-b
- модуль-c
- sub-parent-b
- дочерний элемент-c
- дочерний элемент-a
Я попытался запустить что-то подобное 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, а не локально, только в исключительных случаях, если есть ошибка, на которую нужно охотиться…