Как я могу ускорить мою сборку maven2? - PullRequest
31 голосов
/ 02 октября 2008

Я использую локальную артефакт для прокси запроса, но фазы сборки и тестирования все еще немного медленные. Это не фактическая медленная компиляция и тесты, это «разминка» фреймворка maven2. Есть идеи?

Ответы [ 8 ]

23 голосов
/ 19 февраля 2009

Есть некоторые возможности для оптимизации некоторых задач сборки. Например, «чистая» задача может быть оптимизирована от минут до нескольких миллисекунд, используя простой трюк - переименуйте папку «target» вместо delete.

Подробнее о том, как это сделать, см. Ускорение сборки Maven .

9 голосов
/ 02 октября 2008

Я не знаю, какую версию Maven вы используете, я полагаю, что 2, но я дам то, что я использую для Maven 1.x, чтобы ускорить и сделать вещи чуть быстрее.

Это превратит тесты junit в новый процесс (также помогает при использовании переменных окружения в тестах и ​​т. Д. И дает тестам немного больше памяти.

-Dmaven.junit.fork=true
-Dmaven.junit.jvmargs=-Xmx512m

Это разветвляет компиляцию, которая может ускорить процесс для вас

-Dmaven.compile.fork=true

Надеюсь, это немного поможет, попробуйте.

Также обратитесь к получите больше скорости с вашей сборкой maven2 .

7 голосов
/ 15 июля 2015

Если вы используете Maven3 ($ mvn -version), вы также можете следовать этому руководству . В моем случае результаты таковы:

Нормальное исполнение:

$ mvn clean install 
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 03:05 min
[INFO] Finished at: 2015-07-15T11:47:02+02:00
[INFO] Final Memory: 88M/384M

с параллельной обработкой (4 потока):

$ mvn -T 4 clean install
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 02:22 min (Wall Clock)
[INFO] Finished at: 2015-07-15T11:50:57+02:00
[INFO] Final Memory: 80M/533M

Параллельная обработка (2 потока на ядро)

$ mvn -T 2C clean install

[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 02:12 min (Wall Clock)
[INFO] Finished at: 2015-07-15T12:00:29+02:00
[INFO] Final Memory: 87M/519M
[INFO] ------------------------------------------------------------------------

Как мы видим, разница составляет почти минуту, около 20-30% улучшения скорости.

4 голосов
/ 20 сентября 2013
  1. Установите оптимальные конфигурации памяти, например: добавьте эту строку в mvn.bat установить MAVEN_OPTS = -Xmx512m -XX: MaxPermSize = 256 м

  2. Чистая фаза mvn обычно удаляет целевую папку. Вместо этого, если мы переименуем целевую папку, фаза очистки будет намного быстрее. <<a href="http://bosy.dailydev.org/2009/02/speed-up-your-maven-build-four-times.html" rel="nofollow"> quickClean >

  3. -Dmaven.test.skip = true пропустит выполнение теста.

  4. Добавить -Denforcer.skip = true к аргументу командной строки mvn (это принудительные версии maven, jdk и т. Д., Мы можем пропустить его после начальных запусков)

  5. Отключение некритических операций на этапе сборки: анализ, генерация Javadoc, упаковка исходного кода. Это сэкономит огромное время.

  6. Spawnig новый процесс также помогает в улучшении времени -Dmaven.junit.fork = true (разделить тесты junit на новый процесс) -Dmaven.compile.fork = true (разветвляется при компиляции)

    Надеюсь, это поможет.

3 голосов
/ 29 декабря 2011

Вы можете использовать -DskipTests=true, чтобы пропустить юнит-тесты. что ускорит сборку

2 голосов
/ 02 октября 2008

Я обнаружил, что проекты разбора реактора значительно медленнее, чем проекты с одним насосом. Если ваша сборка является реакторной (многомодульной) и ваши разработчики не работают одновременно со всеми модулями, вы можете удалить родительский POM и построить их отдельно, разрешив зависимости с помощью локального репо. Недостатком является то, что вам нужно установить или развернуть модуль, чтобы его зависимые пользователи могли видеть изменения.

Также, возможно, вы захотите взглянуть на новый Maven 2.1 M1, в котором есть некоторые существенные улучшения скорости.

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

1 голос
/ 19 февраля 2009

Я бы использовал установленный локально Nexus.

0 голосов
/ 09 мая 2016

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

Тесты раскручивают базу данных H2 за тест? Загрузка внешних jar-файлов занимает много времени? Это поможет вам сфокусировать ваше расследование. Простое применение флагов быстрого запуска обычно не работает, так как они уже были бы включены по умолчанию, и вы не хотите жертвовать своими тестами с помощью флагов пропуска.

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