Коли ви будуєте з 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 маніпулює db-записом ключем 12345, який жорстко кодується, а test2 використовує той самий запис! Це не може бути добре ...
Це ситуація, яку слід враховувати в першу чергу, але колись вона забута і може призвести до різних проблем, коли буде зроблено перехід на паралельне побудова Maven.
У випадку, якщо це трапиться, і ви все ще хочете використовувати паралельне виконання принаймні в деяких випадках, ви можете (звичайно, крім того, щоб спробувати виправити тест і зробити їх належним чином ізольовані) відключити тестові запуски Maven за допомогою аргументу -DskipTests:
mvn clean install -T 4 -DskipTests
Деякі програми побудови CI (наприклад, Hudson) можуть одночасно створювати кілька проектів Maven (і навіть на декількох машинах).
Підтримка цього в Maven 'автономному' також буде непоганим, швидкий огляд трекера випуску Maven дав мені: http://jira.codehaus.org/browse/MNG-3004
Якщо ви зіткнулися з цим питанням, хочете розібратися зі своїм сервером збирання, і ви не використовуєте той, який має справу з Maven споконвічно, магічний прапор, який ви шукаєте, це такий:
-Dmaven.repo.local=someNoneGlobalDir
зробіть це для кожної з ваших збірок, і ви можете дозволити їм працювати все одночасно, а не мати все, що використовує maven, у черзі!