【问题标题】:Can I change the timestamp of a snapshot to the build number?我可以将快照的时间戳更改为内部版本号吗?
【发布时间】:2018-02-15 04:42:10
【问题描述】:

我们最近看到了一个错误,即 Maven 尝试检索不存在的 SNAPSHOT。如您所见,内部版本号(无论如何,因为它不是我们的内部版本号)匹配,但时间戳不匹配,导致构建失败。这种情况在每 20 个构建中发生一次。

这是在 Nexus 中:

这就是构建过程中发生的事情:

如您所见,它尝试检索不存在的relations-models:jar:1.1-20170901.134955-278,而20170901.134954-278 存在。注意一秒的偏移量。

  1. 还有其他人有这个问题吗?以及解决方法?
  2. 我正在考虑用内部版本号替换时间戳,但我找不到影响快照后缀方式的方法。有人知道怎么做吗?

这涉及一个(大)多模块项目,这是其中的一个子模块。

Jar插件是这样配置的

<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <configuration> <archive> <manifest> <addClasspath>true</addClasspath> <classpathPrefix>lib/</classpathPrefix> <mainClass>me.magnet.redirect.RedirectService</mainClass> <useUniqueVersions>false</useUniqueVersions> <classpathLayoutType>custom</classpathLayoutType <customClasspathLayout>$${artifact.artifactId}-$${artifact.baseVersion}.$${artifact.extension}</customClasspathLayout> </manifest> </archive> </configuration> </plugin>

部署插件是这样的:

<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-deploy-plugin</artifactId> <version>2.8.2</version> <configuration> <uniqueVersion>false</uniqueVersion> <deployAtEnd>true</deployAtEnd> </configuration> </plugin>

构建也并行运行。

【问题讨论】:

  • maven-metadata.xml 是否显示正确的版本?
  • 后缀是Maven标准。更改它可能是一个坏主意(如果可能的话)。向我们展示您的 pom,以便我们找出发生这种偏移的原因。
  • 这个问题是发生在多模块构建中还是发生在构建时产生工件而另一个构建正在消耗它?这些构建是否并行运行?
  • 更新了问题以回答您的问题。
  • 我也很确定(但当时忘了检查)maven-matedata.xml 有错误的工件名称。所以我的直觉是,由于并行构建和deployAtEnd 配置,它需要一个新的时间戳,而不是使用它已经与maven-matedata.xml 通信的时间戳

标签: maven maven-3 nexus maven-deploy-plugin maven-jar-plugin


【解决方案1】:

Maven 将尝试下载存储库中maven-metadata.xml 文件中列出的最新快照版本。

听起来您在maven-metadata.xml 中列出了此版本,但该文件实际上不存在。这可能可能是由于上传的构建不完整;如果例如多个模块正在尝试使用完全相同的 spanshot 版本号,但其中一些无法编译并且没有上传到 repo。 (另外,maven pom.xml 配置可能不正确)

【讨论】:

    猜你喜欢
    • 2017-10-17
    • 1970-01-01
    • 1970-01-01
    • 2013-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-07
    相关资源
    最近更新 更多