2013-01-10 2 views
2

maven-jar-plugin과 maven-dependency-plugin을 사용하여 내 애플리케이션의 실행 가능한 "번들"을 생성하려고합니다. 대부분의 경우에 잘 작동하지만 종속성 계층 구조에서 스냅 샷을 만들 때 복사 의존성 목표는 스냅 샷 종속성을 잠긴 스냅 샷 (타임 스탬프가있는 스냅 샷)으로 변환하는 것처럼 보입니다Maven 아카이버는 클래스 패스에서 잠금 해제 된 스냅 샷을 사용하지만, 복사 의존성은 잠긴 ​​스냅 샷을 복사합니다.

그러나 archiver-plugin에서 addClasspath는 스냅 샷 종속성 번역하지 : lib 디렉토리에

  • 클래스 패스는 lib 디렉토리/foolib-1.0.1-SNAPSHOT.jar

을 포함 foolib-1.0.1-20130108.143522-8.jar있다 그래서 응용 프로그램을 실행할 수 없습니다.

SNAPSHOT을 번역하지 않거나 archiver-plugin에 SNAPSHOT을 번역하지 말 것을 복사 종속성에 지시하는 방법을 찾을 수 없습니다.

<plugin> 
    <groupId>org.apache.maven.plugins</groupId>   
    <artifactId>maven-dependency-plugin</artifactId>   
    <version>2.5.1</version>     
    <executions> 
     <execution> 
      <id>copy-libs</id> 
      <phase>package</phase>  
      <goals> 
       <goal>copy-dependencies</goal>       
      </goals> 
      <configuration> 
       <excludeScope>provided</excludeScope> 
       <outputDirectory>${package.dest}/lib</outputDirectory> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 

<plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-jar-plugin</artifactId> 
     <configuration> 
     <outputDirectory>${package.dest}</outputDirectory> 
     <archive> 
      <manifest> 
       <addClasspath>true</addClasspath> 
       <classpathPrefix>lib/</classpathPrefix> 
       <mainClass>${main.class}</mainClass> 
      </manifest> 
     </archive> 
     </configuration> 
</plugin> 

답변

3

받는다는 - 종속성 - 플러그인 2.6의 새로운 옵션 (useBaseVersion)이이 문제를 해결할 수 :

다음은 pom.xml 파일 관련 조각입니다. 따라서 버전 2.6 이상이 필요합니다.

참고 : 원래 질문과 반대되는 것으로 보이는 useBaseVersion 옵션을 false로 설정해야합니다. 따라서 원래 버전에는 useBaseVersion이 true로 설정되어 있어야합니다 (기본값은 true).

<plugin> 
    <groupId>org.apache.maven.plugins</groupId>   
    <artifactId>maven-dependency-plugin</artifactId> 
    <!-- need at least 2.6 for useBaseVersion-->   
    <version>2.6</version>     
    <executions> 
     <execution> 
      <id>copy-libs</id> 
      <phase>package</phase> 
      <goals> 
       <goal>copy-dependencies</goal>       
      </goals> 
      <configuration> 
       <excludeScope>provided</excludeScope> 
       <outputDirectory>${package.dest}/lib</outputDirectory> 

       <!-- useBaseVersion=false makes the jar names match those 
        that maven-jar-plugin puts in the manifest classpath --> 
       <useBaseVersion>false</useBaseVersion> 
      </configuration> 
     </execution>      
    </executions> 
</plugin> 
: 아래

는 치어 false로 useBaseVersion를 버전 번호를 변경하고 설정하는 방법에 대한 예입니다