Maven归档程序在类路径中使用未锁定的快照,但复制依赖项复制锁定的快照

时间:2013-01-10 10:56:33

标签: maven maven-dependency-plugin maven-jar-plugin

我正在尝试使用maven-jar-plugin和maven-dependency-plugin来创建我的应用程序的可运行“包”。它在大多数情况下工作正常,但是当我在依赖关系层次结构中有快照时,复制依赖关系目标似乎将快照依赖关系转换为锁定快照(带时间戳的快照)

但是,archiver-plugin中的addClasspath不会转换快照依赖项:

    在lib中
  • ,有foolib-1.0.1-20130108.143522-8.jar
  • 类路径包含lib / foolib-1.0.1-SNAPSHOT.jar

所以我无法运行该应用程序。

我找不到一种方法来告诉复制依赖项不能翻译SNAPSHOTs,或者告诉archiver-plugin翻译SNAPSHOTs。

以下是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>

1 个答案:

答案 0 :(得分:5)

maven-dependency-plugin 2.6中的新选项(useBaseVersion)可以解决这个问题。所以你至少需要2.6版本。

注意:我需要将useBaseVersion选项设置为false,因为我的问题似乎与原始问题相反。因此原始版本可能需要将useBaseVersion设置为true,这是默认值。

下面是一个如何更改版本号并在pom中将useBaseVersion设置为false的示例:

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