2012-09-21 3 views
1

개별 모듈을 빌드하고 상위 pom에 대한 변경 사항을 로컬 저장소에 업로드 할 수있게하는 방법은 무엇입니까?Maven은 부모 pom을 설치하거나 필요할 때 알려 줄 수 있습니까?

의 내가 세 가지 모듈 있다고 가정 해 봅시다 : 부모, 두 아이 (dbmod, appmod를)

  • 부모 : dependencyManagement는 JDBC-foo에에게 정의 1.5
  • dbmod : 종속성 부모
  • 에서 JDBC-foo는 점점 버전을 정의
  • appmod는 : dbmod

상황

012에 depens
  1. parent-pom에서 jdbc-foo 1.5, dbmod에서 jdbc-foo 1.5 및 appmod를 사용하여 빌드합니다.
  2. 내가 appmod 디렉토리에 구축
  3. 내가 dbmod 디렉토리에 구축 1.6

  4. JDBC-foo는에 소스 제어 및 부모 치어 변경을 업데이트

    appmod는 로컬 저장소에서 dbmod을 가져 오는 부모의 지역의 repo 버전을 사용 pom maven 문제 : "[경고] POM for ... dbmod : jar : 3.5.0-SNAPSHOT이 유효하지 않으며 전이 의존성 (있는 경우)을 사용할 수 없습니다. dbmod의 유효 모델을 빌드하는 동안 1 개의 문제가 발생했습니다. 3.5.0-SNAPSHOT "

    편집이 실패했습니다. 자체 내 코드는 JDBC-foo에 대한 액세스에 의존 1.6 변경

옵션

내가 문제를 다음과 같은 방법으로 해결할 수 있습니다

  • 은 (수동으로 부모 치어 파일 문제를 설치합니다 mvn install-file ...)
  • 부모로부터 빌드 불필요한 건물 : 모든 모듈을 항상 빌드합니다.
  • 부모로부터
  • 빌드 원하는 프로젝트를 선택하고 또한-메이크업을 사용하여 (MVN -am -pl : appmod는 ...) 불필요한 건물 : 나는 모든 deps 모든 시간을 구축해야

첫 번째 옵션은 문제입니다 왜냐하면 내가해야할 필요가 있기 때문입니다. 두 번째와 세 번째 옵션은 또한 대형 시스템에서 문제가 될 수있는 모든 deps/모든 개조 작업을 항상 수행해야한다는 것을 알아야합니다.

"-am -pl : mod"이외의 부모 설치를 강제 설정하는 설정이 있거나 상황을 처리하는 "maven way"입니까?(받는다는 다음 할 수없는 경우 나 지역의 repo 부모에 대해 부모를 확인하고 힘의 차이에 설치 래퍼 스크립트를 잘 할 수 있습니다)

감사

피터

받는다는 방법은

+0

음 ... Maven SCM 플러그인 (http://maven.apache.org/scm/maven-scm-plugin/)에는 업데이트 후크가 있어야합니다. 그렇지 않으면 커스텀 Maven 플러그인/antrun 스크립트가 필요해 보입니다. 3 단계와 4 단계에서 – noahlz

+0

을 누르면 이슈를 설치하고 있습니까? mvn install? 아니면 그냥 컴파일? – Hilikus

답변

0

건물에서 부모 파일 시스템에서 치어하지를 얻을 것이다 그냥 괜찮습니다. 이것은 언급 한 원자로 옵션과 함께 권장되는 방법입니다. 그리고 깨끗하게 실행하지 않으면 불필요한 노력이 중복되지 않습니다.

+0

실제로 문제는 실제 경우에는 약 100 개 이상의 모듈이 있다는 것입니다. 그래서, 이렇게 빌드하면 : mvn clean install -pl : modX -am 그리고 변경되지 않았을 때 45 개의 모듈이 있고 빌드 순서에 흩어져있는 4 개의 모듈이있는 경우 15-20m 빌드를 갖습니다. 실제로는 5m 만 필요합니다. –

+0

그러면 멀티 모듈 빌드가 커지고 분해되어야합니다. 그 동안 모듈로 다시 빌드하려는 내용 만 함께 묶는 사용자 정의 POM을 만들 수 있습니다. –

-1

입니다 항상 부모로부터 빌드하기. 모든 모듈을 만드는 문제는 정확히 무엇입니까? 나는 꽤 maven이 안된다고 확신한다. 실제로은 코드에 변화가 없다면 서브 모듈을 다시 빌드하므로 꽤 빠르다. 그러나 그랬더라도, 왜 이것이 당신에게 문제입니까?

다른 시도는 모듈의 부모 선언에서 <relativePath>을 사용하는 것입니다. 그 방법 받는다는 부모 치어에서 설치 한 부모 이슈

<parent> 
    <groupId>com.mycompany.app</groupId> 
    <artifactId>myapp</artifactId> 
    <version>${app.version}</version> 
    <relativePath>.../parent/pom.xml</relativePath> 
</parent> 
+0

상대 경로 설정을 사용하는 것은 좋지 않으며 권장되지 않습니다. –

+1

적어도이 같은 진술을 뒷받침 할 수있는 참조를 추가 할 수 있습니까? 나는 결코 그것을 듣지 못했고 어떤 경우에는 그것이 필요하다. 부모가 아직 설치되지 않았기 때문에 첫 번째 빌드가 실패 할 것이다. – Hilikus

+2

dev와 사용자 메일 링리스트 아카이브를 봐야한다. 이것은 잘 알려진 사실이지만 분명히 명시된 규칙 중 하나입니다. 일반적으로 Maven에서는 모든 것이 저장소 외부에서 가져온 내용을 제외하고는 프로젝트 외부의 참조없이 빌드 할 수 있어야합니다. 따라서 상대 경로와 절대 경로는 사용하지 않는 것이 좋습니다. 부모를 먼저 만들어야하는 경우 프로젝트 설정이 잘못되었습니다. 참고 필자는 Maven The Complete Reference의 공동 저자이며 정기적으로 Maven for Sonatype을 교육한다고 덧붙일 수 있습니다. –

관련 문제