Maven: как делать параллельные сборки? - PullRequest
129 голосов
/ 24 февраля 2009

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

Ответы [ 4 ]

200 голосов
/ 23 июля 2010

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

12 голосов
/ 24 февраля 2009

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

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

7 голосов
/ 14 мая 2017

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

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

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

-Dmaven.repo.local=someNoneGlobalDir

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...