在MANIFEST文件中使用Maven程序集的Maven SNAPSHOT jar文件名不一致

Tha*_*din 13 snapshot nexus maven maven-assembly-plugin

这是场景:

两个Maven 3项目构建.

Build 1具有部署到Nexus的快照jar.

Build 2依赖于快照,引用类似1.0.0-SNAPSHOT,使用该mvn clean package assembly:single命令打包并压缩.

我们遇到的问题:偶尔在创建程序集时,jar的MANIFEST文件有时会说some.jar.1.0.0-SNAPSHOT,有时它会说some.jar.1.0.0-datetime戳,因此导致类未定义错误.

有没有办法在清单文件中阻止此命名问题?

- 编辑 -

进一步的研究发现了以下内容:

"如果快照是从一个仓库解决的,那么它将被加上时间戳,如果它来自反应堆或本地仓库,那么它将是-SNAPSHOT.该插件调用maven解析逻辑,因此这是核心maven行为."

这是正在遇到的确切问题.第二个构建清单文件总是有一个./lib/Framework-1.0.0-SNAPSHOT.jar条目,其中实际的jar文件名在./lib/Framework-1.0.0-SNAPSHOT.jar./lib/之间变化Framework-1.0.0-timestamp.jar基于上面的引用.

Ste*_*lly 8

<dependencySet>你需要设置<outputFileNameMapping>${artifact.artifactId}-${artifact.baseVersion}.${artifact.extension}</outputFileNameMapping>

例如:

<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd">
  <id>appserverB</id>
  <formats>
    <format>zip</format>
  </formats>
  <dependencySets>
    <dependencySet>
      <outputDirectory>/lib</outputDirectory>
      <outputFileNameMapping>${artifact.artifactId}-${artifact.baseVersion}.${artifact.extension}</outputFileNameMapping>
      <includes>
        <include>application:logging</include>
        <include>application:core</include>
        <include>application:utils</include>
        <include>application:appserverB</include>
      </includes>
    </dependencySet>
  </dependencySets>
</assembly>
Run Code Online (Sandbox Code Playgroud)

如果您使用其中一个内置程序集描述符,则需要为自己复制它并自行添加outputFileNameMapping条目