2013-01-10 56 views
2

我想使用maven-JAR,插件和Maven的依賴,插件創建我的應用程序的可運行的「捆綁」。它在大多數情況下工作正常,但是當我在依賴關係層次結構中有快照時,複製依賴關係目標似乎將快照依賴關係轉換爲鎖定快照(帶有時間戳的快照)Maven的歸檔使用在類路徑鎖定快照,但複製依賴副本已鎖定快照

但是,archiver-plugin的addClasspath沒有轉化快照依賴關係:

    在LIB
  • ,有foolib-1.0.1-20130108.143522-8.jar
  • 類路徑中包含的lib/foolib-1.0.1-SNAPSHOT.jar

所以我無法運行該應用程序。

我不能找到一種方法來告訴複製依賴於不能轉化快照或一個告訴歸檔-plugin的翻譯快照。

下面是pom.xml中的相關片段:

<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

在Maven的依賴,插件2.6的新選項(useBaseVersion)可以解決這個問題。所以你至少需要2.6版本。

注:我需要設置爲false useBaseVersion的選擇,因爲我的問題好像是原來的問題正好相反。所以原始版本可能需要將useBaseVersion設置爲true,這是默認值。

下面是關於如何useBaseVersion更改版本號設置爲false在POM一個例子:

<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>