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

152

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

Ханс-Петер Стёрр
источник

Ответы:

229

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

hallidave
источник
5
Что означает 1.5 темы? Если у меня одноядерная система, означает ли это 1 поток, а двухъядерная система - 3 потока?
Саад Малик
4
@SaadMalik Да, точно, 3 потока на двухъядерном, 6 потоков на четырехъядерных системах и т. Д.
t0r0X
Есть ли аргумент, который мы можем использовать для JVM, чтобы мы могли использовать его в затмении?
Джейсон Хантли
Поддержка Eclipse не вызывает maven извне.
Турбьерн Равн Андерсен
18

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

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

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

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

Джор
источник
Я думаю, что функциональность Hudson для нескольких проектов maven одновременно нарушена, как указано в комментариях JIRA MNG-3004.
Dougnukem
2

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

-Dmaven.repo.local=someNoneGlobalDir

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

JonnyRaa
источник