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

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


person s3v1    schedule 02.10.2008    source источник
comment
Если вы найдете хороший ответ вне очереди (например, на других сайтах), было бы очень признательно, если бы вы разместили их здесь в качестве ответа.   -  person Einar    schedule 02.10.2008
comment
Я нашел эту статью полезной. Ограничение доступа в Интернет работает хорошо для меня.   -  person artronics    schedule 01.05.2016


Ответы (8)


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

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

person Community    schedule 19.02.2009
comment
ловкие трюки, я тоже часто трачу неоправданное время на чистую задачу. - person s3v1; 03.12.2009
comment
Я некоторое время занимался этой проблемой и нашел время, чтобы написать об этом сообщение в блоге ... надеюсь, что это поможет другим! urbancat.org/2012/05/how-to- скорость-maven-up.html - person Nadav; 02.06.2012
comment
@nadav ссылка больше не работает. Не могли бы вы исправить это? - person Gábor Lipták; 20.08.2013

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

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

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

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

-Dmaven.compile.fork=true

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

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

person Henry B    schedule 02.10.2008
comment
Я использую maven2, но это хорошая ссылка, и я обязательно попробую эту исправленную версию для своих загрузок. Однако проблема заключалась в большем времени запуска сборки и тестирования... - person s3v1; 02.10.2008
comment
Включение форка сделало мой проект немного быстрее - person Gábor Lipták; 20.08.2013

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

person facundofarias    schedule 15.07.2015

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

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

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

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

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

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

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

person Sinto    schedule 20.09.2013

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

person Community    schedule 28.12.2011
comment
Так что не будет делать никаких тестов в первую очередь ..? - person Rob; 11.09.2012
comment
Робот CI будет делать все это при строительстве, поэтому они должны быть там. - person Thorbjørn Ravn Andersen; 07.02.2013
comment
-o, указывающий на автономный режим, помогает, поскольку он не смотрит на удаленные обновления для моментальных снимков. - person Abs; 01.05.2015

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

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

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

person Community    schedule 02.10.2008
comment
это действительно проект реактора, который я использую. три небольших модуля и веб-проект. Я попробовал эту сборку 2.1, и она показалась немного быстрее. - person s3v1; 03.10.2008

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

person Sergey Aldoukhov    schedule 19.02.2009
comment
Нексус тоже хорош. Я использовал и нексус, и артефакты, и они оба довольно быстрые. Nexus немного проще настроить IMO - person s3v1; 03.12.2009
comment
Что делает Nexus, чтобы помочь этому процессу? - person snowe; 11.01.2014

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

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

person Tom Chamberlain    schedule 09.05.2016