Я использую локальный артефакт для проксирования запроса, но этапы сборки и тестирования все еще немного медленные. Это не фактическая компиляция и медленные тесты, это «разогрев» фреймворка maven2. Есть идеи?
Как я могу ускорить сборку maven2?
Ответы (8)
Есть некоторые возможности для оптимизации некоторых задач сборки. Например, «чистую» задачу можно оптимизировать с минут до нескольких миллисекунд с помощью простого трюка — переименовать «целевую» папку вместо удаления.
Чтобы узнать, как это сделать, обратитесь к Ускорьте сборку Maven.
Я не знаю, какую версию Maven вы используете, я предполагаю, что 2, но я дам то, что я использую для Maven 1.x, чтобы ускорить и сделать сборку немного быстрее.
Они будут разветвлять тесты junit в новый процесс (также помогает, когда вы используете переменные среды в тестах и т. д., и дает тестам немного больше памяти.
-Dmaven.junit.fork=true
-Dmaven.junit.jvmargs=-Xmx512m
Это разветвляет компиляцию, которая может ускорить процесс для вас.
-Dmaven.compile.fork=true
Я надеюсь, что это может помочь немного, попробуйте.
Также см. увеличьте скорость с вашей сборкой maven2.
Если вы используете 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% прироста скорости.
Настройте оптимальные конфигурации памяти, например: добавьте эту строку в mvn.bat, установите MAVEN_OPTS=-Xmx512m -XX:MaxPermSize=256m
Чистая фаза mvn обычно удаляет целевую папку. Вместо этого, если мы переименуем целевую папку, фаза очистки будет намного быстрее.‹быстрая очистка>
-Dmaven.test.skip=true пропустит выполнение теста.
Добавьте -Denforcer.skip=true к аргументу командной строки mvn (это принудительные версии maven, jdk и т. д., мы можем пропустить его после начальных запусков)
Отключите некритические операции на этапе сборки: анализ, генерация javadoc, упаковка исходного кода. Это сэкономит огромное время.
Создание нового процесса также помогает сократить время -Dmaven.junit.fork=true (разветвить тесты junit в новый процесс) -Dmaven.compile.fork=true (разветвить компиляцию)
Надеюсь, поможет.
Вы можете использовать -DskipTests=true, чтобы пропустить модульные тесты. что ускорит сборку
Я обнаружил, что синтаксический анализ проектов реакторов выполняется значительно медленнее, чем проекты с одним помпоном. Если ваша сборка является реакторной (многомодульной) и ваши разработчики не работают над всеми модулями одновременно, вы можете удалить родительский POM и собрать их отдельно, разрешив зависимости с помощью локального репозитория. Недостатком является то, что вам нужно установить или развернуть модуль, чтобы его иждивенцы увидели изменения.
Кроме того, вы можете взглянуть на новый Maven 2.1 M1, который содержит некоторые значительные улучшения скорости.
Если ничего из этого не помогает, опубликуйте более подробную информацию о конфигурации вашего проекта (структура модулей и плагинов), параметрах командной строки и конфигурации оборудования (память и диск). Запуск Maven с -X также может показать, на что уходит время.
Я бы использовал локально установленный Nexus.
Сначала вы должны получить более точный анализ времени сборки, используя что-то вроде этого, и определить кандидатов, которые занимают больше всего времени.
Тесты раскручивают базу данных H2 для каждого теста? Требуется ли время для загрузки внешних файлов jar? Это поможет определить, на чем сосредоточить ваше расследование. Простое применение флагов быстрого запуска обычно не работает, поскольку они уже были включены по умолчанию, и вы не хотите жертвовать своими тестами с флагами пропуска.