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: Параллельные сборки в Maven 3 - Apache Maven - Apache Software Foundation .

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

-Dmaven.repo.local=someNoneGlobalDir

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

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

Итак, когда используется параллельная сборка 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

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

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