Мультимодульный проект Maven - как запустить операцию после завершения всех подмодулей - PullRequest
8 голосов
/ 15 ноября 2010

У меня есть многомодульный проект maven, и я хотел бы иметь возможность запустить операцию (antrun) после того, как все подмодули завершат свое выполнение.

В моих проектах я создаю RPM из каждого подмодуля, а на этапе развертывания копирую RPM (по ssh) в репозиторий RPM.
Для репозитория RPM требуется, чтобы после добавления новых RPM я выполнил команду createb, чтобы он мог их проиндексировать.
Так что у меня есть antrun, который на самом деле запускает scp и копирует RPM в репозиторий. Он работает для каждого подмодуля, который фактически производит RPM и подключен к фазе maven deploy . Что я могу сделать, это после того, как каждый scp запустит команду createrepo, но это будет расточительно, у меня более 10 подмодулей, и каждый createrepo занимает около минуты, поэтому я буду тратить драгоценное время на сборку.

Что я хотел бы сделать, это после того, как все подмодули закончили, затем запустите createrepo. Однажды.

Моей первой попыткой было подключить antrun, вызывающий команду createrepo, к фазе родительского pom (супер-pom) deploy . Я сделал это, и проблема заключалась в том, что фаза развертывания родителя запускается до фазы развертывания подмодулей. Я хотел, чтобы он запускался после
Я не могу присоединить команду createrepo к другому более позднему этапу, поскольку этап развертывания является последним в жизненном цикле.

Итак, мой вопрос: есть ли способ запустить «зачистку» antrun или плагин в целом, который будет запущен один раз после успешного завершения всех операций сборки всех подмодулей?

Хаком было бы создать еще один субмодуль и убедиться, что он последний, сделав его зависимым от всех других модулей и запустить createrepo из фазы развертывания этого модуля. Но это ужасно и сложно поддерживать. Я предпочитаю более чистое решение.

Спасибо

Maven версия 2.2.1

Ответы [ 2 ]

3 голосов
/ 15 ноября 2010

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

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

0 голосов
/ 18 октября 2012

Я использую решение, которое отделяет сборку и упаковку от публикаций.Поскольку мы используем Jenkins, каждая сборка вызывает задание публикации, которое обрабатывает также вещи createrepo, и еще приятнее то, что Jenkins позволяет вам также запускать это задание публикации в параллельном режиме.

Что было непросто, так это то, что на самом деле на этапе createrepo, если два задания выполняются в один и тот же момент времени, одно из них завершится сбоем, поскольку они не могут выполнять одну и ту же операцию в одной папке с одним и тем же набором файлов.Тем не менее, я реализовал flock здесь только для фазы createrepo, и теперь все задания действительно выполняются в paralel, также были протестированы три публикации в paralel, но мы используем два из-за некоторых других решений.

Однако, используяПри таком подходе мы сократили общее время сборки с 1,5 часов до 15 минут в общей сложности для двадцати сборок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...