Мевен: як робити паралельні побудови?


152

Коли ви будуєте з maven на багатоядерній / багатопроцесорній машині, часто можна буде паралельно створювати різні підпроекти. Чи є спосіб зробити це з maven? Чи є плагін для цього / що завгодно?

Відповіді:


228

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


5
Що означає 1,5 нитки? Якщо у мене є одноядерна система, це означає 1 потік, але двоядерна система призводить до 3 потоків?
Саад Малик

4
@SaadMalik Так, саме 3 теми на двоядерних ядрах, 6 ниток на чотирьохядерних системах тощо
t0r0X

Чи є аргумент, який ми можемо використовувати для JVM, щоб ми могли використовувати це в затемненні?
Джейсон Хантлі

Підтримка Eclipse не викликає Maven зовні.
Thorbjørn Ravn Andersen

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 маніпулює db-записом ключем 12345, який жорстко кодується, а test2 використовує той самий запис! Це не може бути добре ...

Це ситуація, яку слід враховувати в першу чергу, але колись вона забута і може призвести до різних проблем, коли буде зроблено перехід на паралельне побудова Maven.

У випадку, якщо це трапиться, і ви все ще хочете використовувати паралельне виконання принаймні в деяких випадках, ви можете (звичайно, крім того, щоб спробувати виправити тест і зробити їх належним чином ізольовані) відключити тестові запуски Maven за допомогою аргументу -DskipTests:

mvn clean install -T 4 -DskipTests


12

Деякі програми побудови CI (наприклад, Hudson) можуть одночасно створювати кілька проектів Maven (і навіть на декількох машинах).

Підтримка цього в Maven 'автономному' також буде непоганим, швидкий огляд трекера випуску Maven дав мені: http://jira.codehaus.org/browse/MNG-3004


Я думаю, що функціонал Хадсона для декількох великих проектів одночасно порушений, як зазначено в коментарях до MNG-3004 JIRA.
Дугнукем

2

Якщо ви зіткнулися з цим питанням, хочете розібратися зі своїм сервером збирання, і ви не використовуєте той, який має справу з Maven споконвічно, магічний прапор, який ви шукаєте, це такий:

-Dmaven.repo.local=someNoneGlobalDir

зробіть це для кожної з ваших збірок, і ви можете дозволити їм працювати все одночасно, а не мати все, що використовує maven, у черзі!

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.