2010-08-08 10 views
2

다중 모듈 프로젝트에서 Maven 종속성을 집계하는 방법을 알아 내려고합니다. 내가 가진 예를 들어, :다중 모듈 Maven 프로젝트의 집계 종속성

root pom/project1 
root pom/project2 

내가 mvn dependency:copy-dependencies를 실행, 나는에 의존와 끝까지 :

root pom/project1/target/dependency 
root pom/project2/target/dependency 

내가 진정으로 원하는 것은 그 나는 루트 치어에서 MVN 명령을 실행하는 경우 폴더, 복사 할 모든 종속성을 root pom/dependency으로 복사하십시오. 루트 pom의 출력 디렉토리를 가져 오는 maven 속성이 있습니까? (${project.build.directory}과 유사)? 나는 사실 후에 모든 의존 폴더를 같은 장소에 복사 할 수 있다는 것을 알았지 만, 나는 조금 더 깨끗한 것을 기대하고 있었다.

답변

1

Dependency를 특정 위치로 복사하려면 종속성 플러그인을 구성해야합니다. 이는 outputDirectory 구성 등록 정보로 수행 할 수 있습니다.

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-dependency-plugin</artifactId> 
    <executions> 
     <execution> 
     <id>copy-dependencies</id> 
     <phase>package</phase> 
     <goals> 
      <goal>copy-dependencies</goal> 
     </goals> 
     <configuration> 
       <outputDirectory>${outputDir}</outputDirectory> 
     </configuration> 
     </execution> 
    </executions> 
</plugin> 

하지만 배포를 위해이 일을하려고하면, 난 당신이 maven assembly plugin

문서를 사용하여 어셈블리를 만들 권하고 싶습니다 말한다 :

메이븐 2.0 총회 플러그인은 기본적으로 의도 사용자가 프로젝트 출력을 종속성, 모듈, 사이트 설명서 및 기타 파일 과 함께 배포 가능한 단일 아카이브에 집계 할 수 있습니다.

+0

감사합니다. 그게 내가 필요한 것 같아. – Greg

1

루트 pom 폴더에서 mvn 명령을 실행하면 모든 종속성이 루트 pom/dependency에 복사됩니다. 루트 pom의 출력 디렉토리를 가져 오는 maven 속성이 있습니까? (${project.build.directory}과 유사)?

아니요, 모듈이 실제로이를 인식해서는 안되기 때문입니다.

사실 모든 종속 폴더를 같은 위치에 복사 할 수 있다는 것을 알았지 만 조금 더 깨끗한 것을 기대하고있었습니다.

Maven 방식은 Maven Assembly Plugina custom descriptor을 사용합니다. 그러나 Maven 어셈블리 플러그인과 그 디스크립터 포맷에 익숙하지 않다면 쉽지 않을 것입니다.

덜 깨끗하지만 쉬운 접근 방법은 상대 경로를 사용하여 부모 프로젝트에 종속성을 복사하도록 Maven Dependency plugin을 구성하는 것입니다. 이런 식으로 뭔가 : 내가 말했듯이

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-dependency-plugin</artifactId> 
    <version>2.1</version> 
    <configuration> 
    <outputDirectory>../root_pom/target/dependency</outputDirectory> 
    </configuration> 
</plugin> 

는하지만,이 모듈 모두에 좋지 않다 루트 프로젝트 (내가 빌드의 일부로 목표 호출을 포함하여 더 갈 것 사이에 꽉 커플 링을 소개합니다 , 모듈은 독립적으로 유지되어야하며 부모를 "체크 아웃"하지 않고 하나의 모듈을 빌드 할 수 있어야합니다.

+0

어셈블리 플러그인을 사용해 보겠습니다. 감사합니다! – Greg

+0

@Greg 어셈블리 플러그인을 사용하여이 작업을 수행 할 수있는 방법을 찾았습니까? – herau

+0

@herau이 문제를 해결하기 위해 내가 한 일을 기억하지 못한다. 그러나 내가 지난 몇 년 동안 배운 것을 다시 사용한다면 어셈블리 플러그인을 사용할 것이다. 루트 레벨에서 새로운 maven 모듈을 추가하기 만하면됩니다. "assembly"또는 원하는 것을 호출 할 수 있습니다. \t \t \t \t \t 런타임 \t \t \t / \t 이렇게하면 가까워 질 것입니다. – Greg

관련 문제