Подтвердить что ты не робот

Как я могу ускорить сборку maven2?

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

4b9b3361

Ответ 1

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

Чтобы узнать подробности, как это сделать, обратитесь к Ускорьте настройку Maven.

Ответ 2

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

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

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

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

-Dmaven.compile.fork=true

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

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

Ответ 3

Если вы используете 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

  • Настройте оптимальные конфигурации памяти, например: добавьте эту строку в mvn.bat set MAVEN_OPTS = -Xmx512m -XX: MaxPermSize = 256m

  • Чистая фаза mvn обычно удаляет целевую папку. Вместо этого, если мы переименуем целевую папку, фаза очистки будет намного быстрее. < quickClean >

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

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

  • Отключить некритические операции во время фазы сборки: анализ, генерация javadoc, исходная упаковка. Это сэкономит огромное время.

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

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

Ответ 5

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

Ответ 6

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

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

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

Ответ 7

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

Ответ 8

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

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

Ответ 9

На моем актуальном проекте:

1/mvn clean install [INFO] Общее время: 01:05 ч

2/mvn clean install -DskipTests [INFO] Общее время: 18:35 мин.

3/mvn clean install -Dmaven.test.skip -DskipTests [INFO] Общее время: 10:58 мин.

4/mvn -T 1C clean install -Dmaven.test.skip -DskipTests
[INFO] Общее время: 04:00 мин.