메이븐 : 병렬 빌드를 수행하는 방법?


152

멀티 코어 / 멀티 CPU 머신에서 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 스레드가 있습니까?
Saad Malik

4
@SaadMalik 예, 정확히, 듀얼 코어에서 3 개의 스레드, 쿼드 코어 시스템에서 6 개의 스레드 등
t0r0X

JVM에 사용할 수있는 인수가 있습니까? 이클립스에서 사용할 수 있습니까?
Jason Huntley

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은 키 12345를 사용하여 db 항목을 조작합니다.이 키는 하드 코드되어 있으며 test2는 동일한 항목을 사용합니다! 좋지 않아 ...

처음에는 고려해야 할 상황이지만 언젠가는 잊혀져 병렬 메이븐 빌드로 전환하면 다른 문제가 발생할 수 있습니다.

이런 상황이 발생하고 적어도 일부 경우에 병렬 실행을 사용하려는 경우 -DskipTests 인수를 사용하여 Maven 테스트 실행비활성화 할 수 있습니다 (물론 테스트를 수정하고 올바르게 격리하는 것 외에도) .

mvn clean install -T 4 -DskipTests


12

일부 CI 빌드 애플리케이션 (예 : hudson)은 동시에 여러 머신에서 여러 maven 프로젝트를 빌드 할 수 있습니다.

maven 'standalone'에서이 기능을 지원하는 것도 좋을 것입니다. maven 이슈 트래커를 통해 살펴 본 내용은 다음과 같습니다. http://jira.codehaus.org/browse/MNG-3004


MNG-3004 JIRA 의견에 표시된 것처럼 동시에 여러 maven 프로젝트의 Hudson 기능이 손상되었다고 생각합니다.
Dougnukem 2009

2

이 질문에 도달하여 빌드 서버를 정렬하려고하고 기본적으로 maven을 다루는 서버를 사용하지 않는 경우 찾고있는 마술 플래그는 다음과 같습니다.

-Dmaven.repo.local=someNoneGlobalDir

각 빌드마다 그렇게하면 대기열에서 maven을 사용하는 모든 것을 갖지 않고 동시에 모두 실행할 수 있습니다!

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.