Выполнить цель на родителя после завершения детей
У меня есть мультимодульный проект Maven (несколько уровней вложенности). Обычно, когда я выполняю сборку Maven (например, mvn install
или что-то еще), maven будет выполнять все цели родительского проекта, прежде чем продолжить работу с детьми.
Я хочу иметь возможность определить цель, которая работает на родителя, но не до тех пор, пока все дети не будут обработаны. Есть ли способ сделать это?
В частности, что я хочу сделать, это запустить exec:exec
цель, которая просматривает файловую систему в поисках файлов результатов тестирования и копирует их в центральное место для агрегирования нашей системой CI (cruisecontrol). Итак, альтернативные решения этой проблемы также приветствуются:)
ОБНОВЛЕНИЕ: я забыл упомянуть одно требование: мне нужно, чтобы цель exec запускалась независимо от того, успешна ли сборка или нет.
4 ответа
Исходя из других ответов и моего собственного последующего исследования, не похоже, что то, что я описал, возможно с Maven.
Тем не менее, я смог решить свою проблему, хотя решение относится только к круиз-контролю. По сути, я связал свою цель exec с фазой перед сайтом, а затем определил pre-site как sitegoal
в моей конфигурации круизконтроля. sitegoal
выполняется после основной цели, и делает это независимо от того, успешна ли сборка или нет.
Я полагаю, что другие системы CI предлагают нечто подобное..
Я не думаю, что возможно сделать что-то от родителя в конце сборки с несколькими модулями (это просто не так, как все работает). Тем не менее, вы рассматривали возможность добавления модуля (который может быть типа pom) в зависимости от всех дочерних проектов (таким образом, это будет "последний" проект в сборке реактора) и запуска exec:exec
в этом модуле? Я могу что-то упустить, но я не понимаю, почему это не сработает.
Больше похоже на плагин для отчетности. Создать плагин Maven на самом деле довольно просто.
Почему бы не присоединить шаг копирования для запуска к этапу проверки каждого подпроекта, чтобы скопировать результаты в родительское местоположение. После этого вы можете иметь похожий шаг в родительском элементе для агрегации CI.
В качестве альтернативы, вы можете сделать так, чтобы каждый подпроект выполнял свою собственную интеграцию CI, используя подобную технику.
Мы, в числе прочего, часто используем эту технику для создания заглушек веб-сферы ejb для банки.