Как исключить немодифицированные (scm) модули из релиза maven - PullRequest
0 голосов
/ 29 декабря 2010

У меня есть огромный проект, который содержит около 200 банок, когда я готовлю релиз, maven готовится ко всем банкам, но наверняка есть банки, которые не были изменены с момента последней сборки, так что есть ли способ проверить, был ли jar изменен с момента последней строить из scm? и исключить их?

Я не хочу переставлять банки (более 200) по отдельности.

например: я хочу сделать пересылку для родителя, но я не хочу пересылать jar4, который не был изменен

-Parent

---------Module1

----------------jar1*

----------------jar2*

---------Module2

----------------jar3*

----------------jar4   

1 Ответ

0 голосов
/ 29 декабря 2010

например: я хочу сделать пересылку для родителя, но я не хочу пересылать jar4, который не был изменен

Синтаксис для этого

mvn -pl Module1,Module2/jar3 <your maven goals here>

(в этом случае вы хотите собрать весь Module1 и просто jar3 из Module2)

Теперь самое сложное, как собрать параметр в -pl. Я уверен, что нет никакого maven способа сделать это, поэтому вам, вероятно, придется написать сценарий оболочки (или Ruby, Groovy, PERL Python и т. Д. Сценарий), который сделает это за вас.

В основном, что должен делать ваш скрипт:

  • ищет все каталоги проектов maven (каталоги, содержащие pom.xml) в данном каталоге, сортирует их в обратном порядке (сначала самые глубокие пути)
  • найти все измененные файлы во всей иерархии (используя svn, cvs или любые другие вызовы)
  • сопоставить каждый измененный файл с одним из проектов (путем сравнения путей), собрать все сопоставленные проекты в список
  • Теперь оптимизируйте список, выполнив некоторую оптимизацию родитель / потомок (если присутствуют все потомки данного родителя, удалите потомков и добавьте родителя). Повторяйте это до тех пор, пока не достигнете корневой иерархии.
  • Из оставшегося списка извлеките относительные пути, соедините их запятыми и запустите процесс maven, используя это значение для параметра -pl.
...