Ускорение Процесса Сборки С Помощью Maven

Вероятно, многие из вас работают с Maven. Если да, то, полагаю, каждый из вас каждый день по несколько раз собирает свой проект, особенно если вы сейчас находитесь на активной стадии разработки и изменения затрагивают множество модулей.

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

И тогда приходит время, когда с этим нужно что-то делать.

Миграция с Maven 2 на Maven 3 Вы все еще используете maven2? Странный.

Переход на версию 3 сам по себе может значительно ускорить процесс сборки.

В моем проекте переход на Maven 3 дал прирост скорости сборки на 10%.

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

Миграция займет у вас несколько минут и в большинстве случаев пройдет безболезненно.

Хотя есть вероятность, что некоторые файлы конфигурации все равно придется править.

Использование ядер и дополнительных потоков У Maven 3 есть отличный вариант:

  
   

mvn -T 4 clean intall mvn -T 2C clean install

В первом случае мы явно указываем, что хотим запустить процесс сборки в 4 потока.

Во втором случае мы указываем, что каждому ядру должно быть выделено 2 потока для процесса сборки.

Это одна из новых возможностей нового maven — Parallel Builds. Эта функция анализирует график зависимостей вашего проекта.

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

Для моего текущего проекта скорость сборки со вторым параметром (-T 2C) ускорилась на 20%.

Правда, здесь есть один минус.

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

В моем случае это +30% к потреблению памяти.

Хочу сразу обратить ваше внимание на то, что если связность модулей в вашем проекте очень низкая, то Эта опция позволяет увеличить скорость сборки на порядок.

Кстати, это повод задуматься об архитектуре вашего проекта.

Ведь если сборка занимает довольно много времени, то небольшой рефакторинг поможет снизить эту цифру.

Хотя, конечно, это все очень индивидуально.

В целом разработчики утверждают, что прирост скорости сборки может составить 20-50%.

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

Разделение не должно стать самоцелью.

Но чем больше раздел и чем меньше зависимостей, тем быстрее происходит процесс сборки.

Распределение тестов по модулям тоже повысит производительность, и в принципе это удобно.

МВНШ Maven Shell — это, по сути, просто активная командная строка Maven. Вся фишка в том, что она постоянно висит в памяти, поэтому при каждой новой сборке нет необходимости запускать новую JVM. Кроме того, все файлы конфигурации кэшируются и все плагины уже загружены.

Вы можете прочитать больше здесь И здесь .

Плагины Убедитесь, что вы не используете ненужные плагины и не используете дополнительные там, где можно обойтись без них.

Maven — это целая экосистема, поэтому важно понимать, что каждый элемент этой системы влияет на производительность целого.

Также стоит отметить, что при сборке с параметром «-T» в журнале выполнения вы можете обнаружить что-то вроде этого:

[WARNING] ***************************************************************** [WARNING] * Your build is requesting parallel execution, but project * [WARNING] * contains the following plugin(s) that are not marked as * [WARNING] * @threadSafe to support parallel building. * [WARNING] * While this /may/ work fine, please look for plugin updates * [WARNING] * and/or request plugins be made thread-safe. * [WARNING] * If reporting an issue, report it against the plugin in * [WARNING] * question, not against maven-core * [WARNING] ***************************************************************** [WARNING] The following plugins are not marked @threadSafe in eridanus-supervoid-module: [WARNING] org.codehaus.mojo:jboss-maven-plugin:1.5.0

Поэтому на самом деле желательно использовать последние версии плагинов, поскольку с большой вероятностью они уже могут быть потокобезопасными.

Как вы понимаете, если плагин не является потокобезопасным, то все его задачи нельзя распределить между потоками с помощью опции «-T».

Буду благодарен за любую дополнительную информацию, которая поможет ускорить сборку.

Теги: #maven 3 #процесс сборки #ускорение сборки #java

Вместе с данным постом часто просматривают: