簡體   English   中英

Maven jar插件 - SNAPSHOT依賴項的錯誤的Class-Path條目

[英]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打包的JARartifact-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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM