2014-07-18 6 views
1

모듈 A는 모듈 B에 종속됩니다. 모듈 B가 빌드되면 ModuleB.jar이라는 이름이 붙여지며 대상 디렉토리에 복사됩니다. 에 ModuleA.jar와 함께 ModuleB.jar (이름에 버전) 및 ModuleB-1.0.jar : 이제 모듈 A의 치어에 나는 버전 번호를 넣어 가지고,하지만 지금은이 개 같은 모듈 B 단지가maven 다중 모듈 종속성 버전

<dependency> 
    <groupid>com.mycompany.app</groupid> 
    <artificatId>ModuleB</artifactId> 
    <version>1.0</version> 
</dependency> 

을 넣어야 할 대상 디렉토리

나는 우리가 버전 번호가없는 모듈 A의 치어의 종속성으로 모듈 B를 추가하는 어쨌든 거기에이 항아리

에 따라 다른 기존 응용 프로그램이 있기 때문에 병의 마지막 이름과 버전 번호를 유지하는 것을 선호

? 전혀 깨끗한 해결책을 찾았는지, 아니면 혼자 힘든 생활을하고있는 것입니까?

EDIT : 명확히하기 :이 모듈은 부모 pom에서 jar로 빌드되며 종속성과 함께 프로젝트의 상위 디렉토리 외부에있는 대상 디렉토리에 복사됩니다. 따라서 두 개의 ModuleB jar가있는 이유는 모듈 B가 컴파일되어 ModuleB.jar로 설정된 최종 이름으로 패키지화 된 경우이고 모듈 A가 모듈 B가 포함되지만 모듈 B를 포함하지만 모듈 B가 포함 된 종속성과 함께 패키지화되고 패키지화되는 경우입니다. 1.0.jar

고마워요!

복사 의존성 실행 (나는 복사하는 동안 버전을 제거 할 수 있지만 그때는 봄 항아리 = /와 같은 제 3 자 항아리에 버전 잃게) :

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-dependency-plugin</artifactId> 
    <version>2.8</version> 
    <executions> 
     <execution> 
      <id>copy-dependencies</id> 
      <phase>package</phase> 
      <goals> 
       <goal>copy-dependencies</goal> 
      </goals> 
      <configuration> 
       <outputDirectory>${build.dir}/lib</outputDirectory> 
       <overWriteIfNewer>true</overWriteIfNewer> 
       <stripVersion>false</stripVersion> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 
+1

적어도 모든 모듈이 동일한 버전으로 빌드되는 다중 모듈 프로젝트 인 경우, 항상 업데이트해야하는 대신 $ {project.version}을 지정할 수 있어야합니다. 나는 그것이 당신의 실제 문제를 해결할 것이라고 생각하지 않습니다. 두 개의 moduleB jar가 똑같은 체크섬과 모든 것과 같이 다른 이름으로 동일합니까? –

+0

@GerardRyan 예 ModuleB 병은 정확히 다른 이름 일뿐입니다. 편집 한 내용을 살펴보고 무슨 일이 일어나는지 설명합니다. –

+0

종속성을 복사하는 데 사용하는 상위 pom xml을 포함 할 수 있습니까? 솔루션은 종속성 복사본에서 모듈 B를 제외 할 수 있다고 생각합니다. –

답변

1

그래서 문제가되었다 그 I 한 번 maven-jar-plugin (최종 버전이없는 버전)을 실행하고 한 번 maven-dependency-plugin을 실행할 때 두 개의 플러그인이 동일한 대상 디렉토리로 출력되어 ModuleB.jar 및 ModuleB- 1.0.jar.

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-jar-plugin</artifactId> 
    <version>2.4</version> 
    <configuration> 
     <outputDirectory>${build.dir}/lib</outputDirectory> 
    </configuration> 
</plugin> 

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-dependency-plugin</artifactId> 
    <version>2.8</version> 
    <executions> 
     <execution> 
      <id>copy-dependencies</id> 
      <phase>package</phase> 
      <goals> 
       <goal>copy-dependencies</goal> 
      </goals> 
      <configuration> 
       <outputDirectory>${build.dir}/lib</outputDirectory> 
       <overWriteIfNewer>true</overWriteIfNewer> 
       <stripVersion>false</stripVersion> 
       <excludeGroupIds>com.mycompany.app</excludeGroupIds> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 

내 모든 자식 모듈을 구축하고 지정된 출력 디렉토리로 jar'ing 첫 번째 플러그인 :

그래서 부모 치어에 나는 플러그인을 구성. 두 번째 플러그인은 내 모듈의 모든 종속물을 첫 번째 플러그인의 동일한 출력 디렉토리에 복사합니다. 내부 모듈을 사용하지 않습니다. <excludeGroupIds>

간단한 해결책이 있다는 것을 깨닫게 해줘서 고맙습니다!

관련 문제