Ускоряем сборку Maven проекта

Возможно, что программы на Java и работают гораздо медленнее программ на C++, а также, возможно, они потребляют больше памяти, но зато компилятор Java очень быстр по сравнению с компилятором C++.

К сожалению, в современных коммерческих проектах есть ещё много других этапов сборки кроме компиляции. Сборка больших Maven проектов может состоять из огромного количества этапов: скачивание зависимостей, компиляция, тесты, обработка и копирование ресурсов, упаковка в jar, war или ear и ещё много чего, что в конечном итоге приводит к большим временным затратам на получение собранного дистрибутива.

В этой статье я попытаюсь рассказать вам, каким образом вы можете ускорить сборку Maven проекта.

Допустим, у вам есть проект. Сборка в самом простейшем случае выполняется командой:

Эта наиболее часто используемая команда для сборки, и она прекрасно работает. В моём случае выполнение этой команды занимает 55 секунд.

Мы можем заставить Maven использовать несколько потоков. Есть такая экспериментальная опция -T.

Указываем мавен использовать по два потока на каждое ядро процессора:

В итоге сборка того же проекта заняла 36 секунд.

По три потока на каждое ядро процессора:

Сборка заняла 35 секунд. Разницы почти никакой. Можно списать на погрешность.

По четыре потока на каждое ядро процессора:

Сборка заняла 34 секунды. Тоже почти столько же.

Все эти тесты запускались на 4-х ядерном Intel® Core™ i5-4460 CPU @ 3.20GHz. Видимо, 8-и потоков, которые были в случае с двумя потоками на каждое ядро, уже было более чем достаточно.

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

Сборка заняла 35 секунд. В нашем случае сборка без clean не дала особого прироста производительности.

Следующим этапом мы  можем включить оффлайн режим:

В моём случае сборка так же осталась 35 секунд, но если ваш проект при сборке постоянно всё пытается скачать из интернета, то --offline вполне может помочь.

В моём случае наибольшее увеличение скорости сборки дало включение сборки в несколько потоков. На вашем же проекте вам лучше попытаться поиграться с clean и --offline, а также с количеством потоков на ядро, чтобы подобрать оптимальное сочетание.

Также обратите внимание, что на момент написания этой статьи опция -T  экспериментальна, она поддерживается не всеми плагинами, и, возможно, не всегда поддерживается в должной мере.


Поделиться:

Добавить комментарий

Ваш e-mail не будет опубликован.

*