Maven: Paralel yapılar nasıl yapılır?


152

Çok çekirdekli / çok işlemcili bir makinede maven ile oluşturduğunuzda, paralel olarak farklı alt projeler oluşturmak genellikle mümkün olacaktır. Bunu maven ile yapmanın bir yolu var mı? Bunun için bir eklenti var mı?

Yanıtlar:


228

Maven 3 (beta 1'den itibaren) artık deneysel bir özellik olarak paralel yapıları desteklemektedir.

Örneğin,

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

Tam dokümantasyon Maven wiki'sinde bulunabilir.

https://cwiki.apache.org/confluence/display/MAVEN/Parallel+builds+in+Maven+3


5
1.5 iş parçacığı ne anlama geliyor? Tek çekirdekli bir sistemim varsa, bu 1 iş parçacığı anlamına gelir, ancak çift çekirdekli bir sistem 3 iş parçacığıyla sonuçlanır mı?
Saad Malik

4
@SaadMalik Evet, tam olarak, çift çekirdekli 3 iş parçacığı, dört çekirdekli sistemlerde 6 iş parçacığı vb.
t0r0X

JVM için kullanabileceğimiz bir argüman var mı, bu yüzden bunu tutulmada kullanabilir miyiz?
Jason Huntley

Eclipse desteği maven'i harici olarak başlatmaz.
Thorbjørn Ravn Andersen

18

Önerilen çözümler harika ama paralel yapılarda test kararlılığıyla ilgili cevaplara bir şeyler eklemek istedim .

Yani, Maven paralel yapı kullanıldığında:

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

Testlerle ilgili bazı sorunlar görünebilir. Seri ve paralel test yürütme arasında farklı olan testlerdeki davranışlara dikkat edin. Çoğu zaman, test yalıtımını kaynak açısından uygun olmayan test etmek için yapar .

Örneğin, test1, db girişini sabit kodlanmış 12345 anahtarıyla değiştirir ve test2 aynı girişi kullanır! İyi olamaz ...

İlk etapta düşünülmesi gereken bir durum, ama bazen unutulmuş ve paralel maven yapısına geçiş yapıldıktan sonra farklı sorunlara yol açabilir.

Böyle bir durumda ve yine de en azından bazı durumlarda paralel yürütmeyi kullanmak istiyorsanız, -DskipTests bağımsız değişkenini kullanarak Maven test çalışmalarını devre dışı bırakmak için (elbette testi düzeltmeye ve düzgün şekilde izole etmeye çalışmanın yanı sıra) :

mvn clean install -T 4 -DskipTests


12

Bazı CI derleme uygulamaları (örn. Hudson) aynı anda birden fazla makineyi (hatta birden fazla makinede) oluşturabilir.

Bunu maven 'bağımsız' da destek de iyi olurdu, maven sorunu izleyicisine hızlı bir bakış bana verdi: http://jira.codehaus.org/browse/MNG-3004


MNG-3004 JIRA yorumlarında belirtildiği gibi, birden fazla maven projesi için Hudson işlevselliğinin kırıldığını düşünüyorum.
Dougnukem

2

Yapı sunucunuzu sıralamak isteyen bu soruya geldiyseniz ve aradığınız sihirli bayrakla ilgilenen maven ile ilgilenen birini kullanmıyorsanız:

-Dmaven.repo.local=someNoneGlobalDir

bunu yapılarınızın her biri için yapın ve sıradaki maven kullanan her şeye sahip olmak yerine aynı anda çalışmasına izin verebilirsiniz!

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.