Как исключить не модифицированные (SCM) модули из выпуска Maven
-
13-10-2019 - |
Вопрос
У меня есть огромный проект, который содержит около 200 банок, когда я готовите выпуск Maven Prepare для всех банок, но наверняка есть банки, которые не были изменены с момента последней сборки, так что есть ли способ проверить, был ли JAR изменен с момента последней сборки из SCM ? и исключить их?
Я не хочу решать банки (более 200) индивидуально.
Например: я хочу сделать рассмотрение родителей, но я не хочу пересекать jar4, который не был изменен
-Parent
---------Module1
----------------jar1*
----------------jar2*
---------Module2
----------------jar3*
----------------jar4
Решение
Например: я хочу сделать рассмотрение родителей, но я не хочу пересекать jar4, который не был изменен
Синтаксис для этого
mvn -pl Module1,Module2/jar3 <your maven goals here>
(В этом случае вы хотите построить все модуль1 и JAR3 Module2)
Теперь сложная часть в том, как собрать параметр для -pl. Я почти уверен, что нет никакого способа сделать это, поэтому вам, вероятно, придется написать сценарий оболочки (или Ruby, Groovy, Perl Python и т. Д.)
По сути, что должен делать ваш сценарий:
- Ищите все каталоги проектов Maven (каталоги, которые содержат pom.xml) в данном каталоге, сортируйте их в обратном порядке (сначала по глубоким пути)
- Найдите все измененные файлы во всей иерархии (используя SVN, CVS или любые вызовы)
- Карта каждый из них изменил файл в один из проектов (сравнивая пути), собирайте все соответствующие проекты в списке
- Теперь оптимизируйте список, выполнив некоторую оптимизацию родителей/ребенка (если присутствуют все дети данного родителя, удалите детей и добавьте родителя). Сделайте это неоднократно, пока не достигнете корневой иерархии.
- Из оставшегося списка извлеките относительные пути, присоединяйтесь к ним с запятой и запустите свой процесс Maven, используя это значение для
-pl
параметр.