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 в очереди!