Maven: как делать параллельные сборки?

Когда вы создаете с помощью maven на многоядерном/многопроцессорном компьютере, часто можно параллельно создавать разные подпроекты. Есть ли способ сделать это с помощью maven? Есть ли плагин для этого/независимо?

Ответ 1

Maven 3 (начиная с бета-версии 1) теперь поддерживает параллельные сборки в качестве экспериментальной функции.

Например,

mvn -T 4 clean install # Builds with 4 threads
mvn -T 1C clean install # 1 thread per cpu core
mvn -T 1.5C clean install # 1.5 thread per cpu core

Полная документация может быть найдена на вики Maven.

https://cwiki.apache.org/confluence/display/MAVEN/Parallel+builds+in+Maven+3

Ответ 2

Некоторые из приложений CI build (например, hudson) могут одновременно создавать несколько проектов maven (и даже на нескольких компьютерах).

Поддержка этого в maven 'standalone' также была бы приятной, быстрый просмотр трекера maven дал мне: http://jira.codehaus.org/browse/MNG-3004

Ответ 3

Если вы столкнулись с этим вопросом и хотите разобраться в своем сервере сборки, и вы не используете тот, который имеет дело с maven изначально, волшебный флаг, который вы ищете, это:

-Dmaven.repo.local=someNoneGlobalDir

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

Ответ 4

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

Итак, когда Maven parallel build используется:

mvn -T 4 clean install # Builds with 4 threads
mvn -T 1C clean install # 1 thread per cpu core
mvn -T 1.5C clean install # 1.5 thread per cpu core

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

Например, test1 управляет записью db с ключом 12345, который является жестко запрограммированным, а test2 использует одну и ту же запись! Это не может быть хорошо...

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

Если это произойдет, и вы по-прежнему хотите использовать параллельное выполнение, по крайней мере, в некоторых случаях, вы можете (конечно, помимо попытки исправить тест и сделать его должным образом изолированным) до отключить тестовые тесты Maven с использованием аргумента -DskipTests:

mvn clean install -T 4 -DskipTests