2008-10-02 2 views
30

로컬 인공물을 사용하여 요청을 프록시하고 있지만 빌드 및 테스트 단계는 여전히 조금 느립니다. 느린 실제 컴파일과 테스트는 아니며 maven2 프레임 워크의 "예열"입니다. 어떤 아이디어?maven2 빌드의 속도를 높이려면 어떻게해야합니까?

+2

out-of-band (다른 사이트에서 f.ex.)를 찾은 경우 답변으로 여기에 게시하면 매우 만족할 것입니다. – Einar

+0

[이 기사] (http://zeroturnaround.com/rebellabs/your-maven-build-is-slow-speed-it-up/) 도움이되었습니다. 제한된 인터넷 연결은 나를 위해 잘 작동합니다. –

답변

22

일부 빌드 작업을 최적화 할 수있는 몇 가지 방법이 있습니다. 예를 들어 '깨끗한'작업은 삭제 대신 '대상'폴더의 간단한 트릭 이름 바꾸기를 사용하여 몇 분에서 몇 밀리 초까지 최적화 할 수 있습니다.

자세한 방법은 Speed up Maven build을 참조하십시오.

+0

깔끔한 트릭, 나는 종종 청결한 작업에도 과도한 시간을 낭비하고 있습니다. –

+2

나는이 문제를 한동안 다루었으며 블로그 게시물을 쓰는 데 시간이 걸렸다. 다른 사람들을 돕기를 희망한다! http://www.urbancat.org/2012/05/how-to-speed-maven-up.html – Nadav

+1

@nadav 링크가 더 이상 작동하지 않습니다. 그것을 고칠 수 있습니까? –

9

사용중인 Maven의 버전을 알 수는 없지만 2로 가정합니다.하지만 Maven 1.x에서 속도를 높이고 작업을 빠르게 처리 할 수 ​​있도록 제공합니다.

이 새로운 프로세스로 JUnit 테스트를 (당신이 등 테스트에서 환경 변수를 사용하여 테스트를 좀 더 많은 메모리를 제공하는 경우도 있습니다.

-Dmaven.junit.fork=true 
-Dmaven.junit.jvmargs=-Xmx512m 

이 포크 가지 속도를 수있는 편집 포크 것 당신이

나는이 조금 도움이 될 수 있습니다 희망
-Dmaven.compile.fork=true 

, 그것을 밖으로 시도하십시오.

을 또한 get more speed with your maven2 build을 참조하십시오.

+0

저는 maven2를 사용하고 있습니다 만 좋은 링크 일 뿐이며 다운로드 한 패치 버전을 확실히 시험해 보겠습니다. 그러나 문제는 더 많은 빌드 및 테스트 시작 시간이었습니다 ... –

+0

링크가 작동하지 않습니다. –

+0

포크를 사용하면 프로젝트가 약간 빨랐습니다. –

2

저는 원자로 프로젝트를 파싱하는 것이 단일 POM 프로젝트보다 상당히 느리다는 것을 알았습니다. 빌드가 reactor (다중 모듈)이고 개발자가 모든 모듈에서 동시에 작업하지 않는 경우 상위 POM을 제거하고 별도로 빌드하여 로컬 repo를 사용하여 종속성을 해결할 수 있습니다. 단점은 부양 가족이 변경 사항을 볼 수 있도록 모듈을 설치하거나 배포해야한다는 것입니다.

또한 몇 가지 중요한 속도 향상 기능이 포함 된 새로운 Maven 2.1 M1을 살펴볼 수 있습니다.

이러한 도움이되지 않으면 프로젝트 구성 (모듈 구조 및 플러그인), 명령 줄 매개 변수 및 하드웨어 구성 (메모리 및 디스크)에 대한 자세한 정보를 게시하십시오. -X를 사용하여 Maven을 실행하면 시간이 어느 정도 걸리는지도 알 수 있습니다.

+0

그것은 실제로 사용하는 원자로 프로젝트입니다. 세 개의 작은 모듈과 웹 프로젝트. 나는 2.1 빌드를 시도했는데 조금 더 빨라 보였다. –

1

로컬로 설치된 Nexus를 사용하고 싶습니다.

+0

Nexus도 좋습니다. 나는 넥서스와 인공물을 모두 사용했으며 둘 다 꽤 빠릅니다. Nexus는 IMO를 구성하기가 조금 더 쉽습니다 –

+0

buildr도 작동 할 수 있습니다. – gatoatigrado

+0

Nexus가이 과정에 도움이되는 것은 무엇입니까? – snowe

3

-DskipTests=true을 사용하면 단위 테스트를 건너 뛸 수 있습니다. 속도

+1

처음부터 테스트를하지 않겠습니까? – Rob

+0

CI 로봇은 건물을 만들 때이 모든 작업을 수행하므로 반드시 있어야합니다. –

+0

오프라인 모드를 나타내는 -o는 스냅 샷의 원격 업데이트를 보지 않으므로 도움이됩니다. – Abs

4
  1. 를 구축 예를 들어, 최적하기 위해 메모리 구성을 조정 것이다 :를 MaxPermSize = 256m

  2. 이 MVN의 청소 단계가 정상적으로 삭제합니다 이 설정 MAVEN_OPTS = -Xmx512m -XX mvn.bat이 줄을 추가 대상 폴더. 대신 대상 폴더의 이름을 바꾸면 클리닝 단계가 훨씬 빨라집니다. < quickClean>

  3. -Dmaven.test.skip = true는 테스트 실행을 건너 뜁니다.

  4. 추가 MVN 명령 행 인수에 충실 -Denforcer.skip =

  5. 안 중요하지 않은 작업 빌드 단계에서 (이, JDK 등, 우리는 초기 실행 후를 건너 뛸 수 있습니다 받는다는 버전을 적용됩니다) 분석, javadoc 생성, 소스 패키징.이렇게하면 엄청난 시간을 절약 할 수 있습니다.

  6. Spawnig 새로운 프로세스는 시간 개선에 도움이 -Dmaven.junit.fork = 사실 -Dmaven.compile.fork = TRUE (포크 컴파일)

    (새로운 프로세스로 JUnit 테스트를 포크) 희망이 도움이됩니다. 당신이 Maven3 ($ mvn -version)를 사용하는 경우

5

, 당신은이 guide을 따를 수 있습니다. 제 경우, 결과는 :

정상적인 실행 : 병렬 처리에

$ mvn clean install 
[INFO] ------------------------------------------------------------------------ 
[INFO] BUILD SUCCESS 
[INFO] ------------------------------------------------------------------------ 
[INFO] Total time: 03:05 min 
[INFO] Finished at: 2015-07-15T11:47:02+02:00 
[INFO] Final Memory: 88M/384M 

(4 개 쓰레드)

$ mvn -T 4 clean install 
[INFO] ------------------------------------------------------------------------ 
[INFO] BUILD SUCCESS 
[INFO] ------------------------------------------------------------------------ 
[INFO] Total time: 02:22 min (Wall Clock) 
[INFO] Finished at: 2015-07-15T11:50:57+02:00 
[INFO] Final Memory: 80M/533M 

병렬 처리 (코어 당 2 개 스레드)

$ mvn -T 2C clean install 

[INFO] ------------------------------------------------------------------------ 
[INFO] BUILD SUCCESS 
[INFO] ------------------------------------------------------------------------ 
[INFO] Total time: 02:12 min (Wall Clock) 
[INFO] Finished at: 2015-07-15T12:00:29+02:00 
[INFO] Final Memory: 87M/519M 
[INFO] ------------------------------------------------------------------------ 

우리가 볼 수 있듯이, 차이는 거의 1 분입니다. 20-30 % 가까이 속도가 향상됩니다.

0

처음에는 this과 같은 것을 사용하여 빌드 시간을 더 세밀하게 분석하고 가장 많은 시간을 차지하는 응시자를 식별해야합니다.

테스트 당 H2 데이터베이스를 테스트하고 있습니까? 외부 jar 파일을 다운로드하는 데 시간이 걸립니까? 이것은 귀하의 조사에 초점을 맞출 곳을 안내 할 것입니다. go-fast 플래그를 적용하는 것은 기본적으로 이미 포함되었으므로 일반적으로 작동하지 않으므로 건너 뛰기 플래그로 테스트를 희생하지 않으려 고합니다.