Выполнить цель на родителя после завершения детей

У меня есть мультимодульный проект 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 для банки.

Другие вопросы по тегам