8

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

但是,归档器插件中的 addClasspath 不会转换快照依赖项:

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

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

我找不到一种方法来告诉复制依赖项不翻译 SNAPSHOT 或告诉归档插件翻译 SNAPSHOT。

这是 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>
4

1 回答 1

10

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>
于 2014-09-26T11:48:27.830 回答