2010-12-07 2 views
1

모듈 B가 모듈 A에 종속되는 다중 모듈 Maven 프로젝트가 있습니다. 모듈 B를 재구성 할 때마다 모듈 A를 다시 빌드하려면 어떻게합니까? 바로 지금 모듈 B를 사용하기 전에 모듈 A를 수동으로 설치해야합니다.다중 모듈 Maven 프로젝트에서 변경 사항 가져 오기

P. 다른 사람이 대답하지 않은 비슷한 질문을하는 것을 봅니다 : Maven: How to use jetty:run in a multi-module Maven project, without needing to install

+0

프로젝트를 빌드하기 위해 어떤 명령을 실행하고 있습니까? mvn 패키지? – jgifford25

답변

1

이것은 두 가지 방법으로 해결됩니다. 첫째, B에 대한 POM은 A에 대해 < 종속성을 포함해야합니다. B가 빌드 될 때 A가 저장소에있는 한 올바른 버전을 가져옵니다.

A가 B보다 먼저 빌드되도록하려면 Maven reactor가이 종속성에 대해 알아야합니다. 이것은 < module> 요소가있는 다중 모듈 빌드에서 수행됩니다. 최상위 POM은 < 패키징> pom </packaging>로 설정되고 두 개의 < 모듈> 요소를 가지며, 하나는 A를위한 것이고 다른 하나는 B를위한 것입니다. 나열된 순서 또는 깊이가 중요하지 않습니다. 소스 프로젝트에서 도달 할 수 있으면 올바른 순서로 빌드됩니다.

B를 만들려하고 Maven 원자로가 A의 소스를 찾아서 확인하도록 할 방법이 없다는 것에 유의하십시오. 원자로는 항상 소스 프로젝트가 필요하며 A와 B는 모두 < module> 요소 그래프를 통해 찾아야합니다. 이는 B에 대한 빌드가 A에 대한 저장소 아티팩트가 최신인지 여부를 알 수 없기 때문에 A의 빌드를 실행하고 알아 내도록해야하기 때문입니다. 또한 이들을 동시에 수행하려면 여기에 설명 된 두 가지를 모두 포함하는 상위 프로젝트가 빌드되는 소스 프로젝트 여야합니다.

Maven이 이러한 종류의 다중 모듈 프로젝트의 경우 Ant보다 느리지는 않지만 Maven 프로젝트를 IDE로 가져 오면 일반적으로 Maven이 수행 할 수있는 빌드보다 훨씬 빠른 빌드가됩니다.

+0

프로젝트 B의 pom.xml은 프로젝트 A를 의존성으로 나열합니다. 문제는 설치된 프로젝트 A를 사용하고 파일 시스템에 프로젝트 A를 사용하지 않는다는 것입니다. 이것은 개발에 고통을줍니다. 기본적으로 프로젝트 B가 다시 컴파일 될 때마다 미리 프로젝트 A가 자동으로 다시 설치되기를 바랍니다. –

+0

그런 다음 두 프로젝트를 모두 부모 POM으로 만들고 거기에서 빌드해야합니다. 또는 IDE로 가져옵니다. –

+0

이 질문을 통해 발생할 수있는 다른 사람들에게 대답은 기본적으로 불가능하다는 것입니다. Brian은 다른 스레드에서 개발을 위해 Maven을 사용하는 것이 너무 힘들어서 대신 최종 빌드를 패키지화하는 데에만 사용해야한다고 제안했습니다. http://stackoverflow.com/questions/4371373 –

0

Eclipse IDE에서 m2eclipse로 작업하면 Maven 실행 구성뿐만 아니라 컴파일 시간에 대한 작업 영역 종속성 관리를 활성화 할 수 있습니다. 이 경우 종속 프로젝트의 컴파일 된 클래스가 Maven 로컬 저장소의 jar 대신에 사용됩니다. 이는 사용자 정의 된 jar 패키징이없는 일반 프로젝트에서 작동합니다.

당연히 명령 줄에서 각 프로젝트를 빌드하고 설치하거나 원자로 프로젝트를 사용하여 두 프로젝트를 한 번에 빌드 할 수 있지만 IDE에서 작업하는 것이 훨씬 쉽지 않습니다.

+0

기본 설정 인 "작업 영역 프로젝트의 종속성 분석"이 설정되어 있습니다. 그러나 Eclipse에서 프로젝트 B pom.xml을 열어 "Dependency Hierarchy"탭으로 이동하면 프로젝트 A에서 가져온 종속성이 설치된 프로젝트 A를 기반으로하고 프로젝트 A는 내 작업 영역이 아닌 것을 알 수 있습니다. –

관련 문제