23 февраля 2014

Maven: Собираем артефакты по разному

Я начал работать с maven в  2007 и тогда он был в принципе большим новшеством для отрасли (в России я имею ввиду).

С тех пор можно сказать мы неразлучны.
С помощью maven я  собираю все не только тестовый код, но и утилитные проекты.

Утилиты имеют свою специфику.
Когда ты их начинаешь писать и деплоить, то деплоить на регулярной основе хочется только ту дельту которая и есть изменение в функционале.
Не хочется перезаливать все, в особенности библиотеки коих может набежать прилично.

А когда разработка закончена и перетекает в фазу саппорта существующего решения - хочется как раз обратного - деплоить все одним куском и не думать про то скопировал ты нужные либы или нет.

В общем желания на разных этапах жизненного цикла строго противоположные, а натянуть на эти жедания один pom.xml трудновато.

Но годы опыта и эксперименты решили и эту проблему.

Дамы и господа, извольте любить и жаловать.

Что это такое ? Это универсальный pom.xml который позволяет работать с обеими стратегиями упаковки конечного артефакта.

В этом файле есть два профиля сборки - thin-package и one-package.
Давайте по порядку.

thin-package пакует код в отдельный jar-файл,а все зависимости складывает в папочку lib/.
Если вы приписали новый и достаточно изолированный кусочек фукнционала к вашему проекту, то можно собрать его под профилем thin-package (mvn -P thin-package) , а вот деплоить уже только основной jar и появившиеся новые библиотеки.



one-package пакует код в один общий артефакт (mvn -P one-package), сбрасывая все зависимости в одну кучу.
Слияние в один большой и монолитный артефакт происходит с помощью maven-assembly-plugin.
Делать это также можно и с помощью maven-shade-plugin, выбирайте сами. 

Удачных и разносторонних сборок Вам!