我正在尝试使用maven-jar-plugin和maven-dependency-plugin来创建我的应用程序的可运行“包”。它在大多数情况下工作正常,但是当我在依赖关系层次结构中有快照时,复制依赖关系目标似乎将快照依赖关系转换为锁定快照(带时间戳的快照)
但是,archiver-plugin中的addClasspath不会转换快照依赖项:
所以我无法运行该应用程序。
我找不到一种方法来告诉复制依赖项不能翻译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>
答案 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>