[英]Maven jar plugin - Wrong Class-Path entry for SNAPSHOT dependency
我正在使用maven-jar-plugin
構建jar和maven-assembly-plugin
,將所有依賴項放在lib/
目錄中的JAR
旁邊。
如果我使用此項目的快照依賴項,則Class-Path入口點會執行該依賴項的不同JAR
,然后是實際打包的JAR
。
這是一個例子:
<dependency>
<groupId>x.y.z</groupId>
<artifactId>artifact</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
為該依賴項inti lib
direcotyr打包的JAR
是artifact-1.0-SNAPSHOT
但主JAR
清單中的Class-Path
條目是lib/artifact-1.0-20170201.104414-8.jar
這里發生了什么,為什么?
提前致謝。
我的assembly.xml
<dependencySets>
<dependencySet>
<useProjectArtifact>false</useProjectArtifact>
<useTransitiveDependencies>true</useTransitiveDependencies>
<outputDirectory>lib</outputDirectory>
<unpack>false</unpack>
</dependencySet>
</dependencySets>
插件:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.2.2</version>
<executions>
<execution>
<id>assembly</id>
<phase>package</phase>
<goals>
<goal>attached</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}</outputDirectory>
<finalName>${dist.name}</finalName>
<appendAssemblyId>false</appendAssemblyId>
<descriptor>${basedir}/assembly.xml</descriptor>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.3.1</version>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
</manifest>
<manifestEntries>
<Class-Path>.</Class-Path>
</manifestEntries>
</archive>
<outputDirectory>${dist.dir}</outputDirectory>
</configuration>
<executions>
<execution>
<goals>
<goal>test-jar</goal>
</goals>
</execution>
</executions>
</plugin>
您已被MJAR-156擊中,目前尚未解決最新的3.0.2。 核心問題是下游的Maven Archiver庫,很可能是MSHARED-169 。
通過指定Maven Archiver不為快照創建唯一版本,您可以非常輕松地解決這個問題。 這由manifest配置下的參數useUniqueVersions
控制,默認為true
。 因此,您可以將Jar插件的配置更改為:
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<version>3.0.2</version>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<useUniqueVersions>false</useUniqueVersions>
</manifest>
<!-- rest of configuration -->
</archive>
<outputDirectory>${dist.dir}</outputDirectory>
</configuration>
<!-- the executions -->
</plugin>
請注意,Jar插件的2.3.1版本已經很老了,您應該考慮更新到最新的3.0.2。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.