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

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

4 ответов


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


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

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


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

Итак, когда параллельная сборка Maven используется:

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

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

-Dmaven.repo.local=someNoneGlobalDir

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