Когда вы работаете с maven на многоядерном / многопроцессорном компьютере, часто бывает возможно создавать разные подпроекты параллельно. Есть ли способ сделать это с Maven? Есть ли плагин для этого / что-нибудь?
Когда вы работаете с maven на многоядерном / многопроцессорном компьютере, часто бывает возможно создавать разные подпроекты параллельно. Есть ли способ сделать это с Maven? Есть ли плагин для этого / что-нибудь?
Ответы:
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
Предлагаемые решения хороши, но я хотел бы добавить кое-что к ответам здесь относительно стабильности теста во время параллельных сборок .
Итак, когда используется параллельная сборка 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 манипулирует записью в базе данных с ключом 12345, который жестко закодирован, а test2 использует ту же запись! Это не может быть хорошо ...
Это ситуация, которая должна быть рассмотрена в первую очередь, но иногда она забывается и может привести к различным проблемам после перехода на параллельную сборку Maven.
В этом случае, и вы все еще хотите использовать параллельное выполнение, по крайней мере, в некоторых случаях, вы можете (конечно, помимо попыток исправить тест и сделать их должным образом изолированными) отключить запуск тестов Maven с помощью аргумента -DskipTests:
mvn clean install -T 4 -DskipTests
Некоторые приложения сборки CI (например, hudson) могут создавать несколько проектов maven одновременно (и даже на нескольких машинах).
Поддержка этого в maven 'standalone' также была бы хорошей, быстрый взгляд через систему отслеживания проблем maven дал мне: http://jira.codehaus.org/browse/MNG-3004
Если вы пришли к этому вопросу, пытаясь разобраться со своим сервером сборки, и вы не используете тот, который изначально имеет дело с maven, то магический флаг, который вы ищете, это:
-Dmaven.repo.local=someNoneGlobalDir
сделайте это для каждой из ваших сборок, и вы можете позволить им запускаться одновременно, вместо того, чтобы все, что использует maven, стояло в очереди!