С тех пор можно сказать мы неразлучны.
С помощью 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, выбирайте сами.
Удачных и разносторонних сборок Вам!