【问题标题】:The timestamp in snapshot jar's maven-metadata.xml is more than a second than the actual jar's timestamp?快照 jar 的 maven-metadata.xml 中的时间戳比实际 jar 的时间戳多一秒?
【发布时间】:2017-10-13 02:50:50
【问题描述】:

我遇到了一个奇怪的问题:

我使用“mvn deploy”(Maven 3.3.9、Jenkins 2.45、Nexus 2.12.0)将快照 jar 部署到我在 jenkins 中的 nexus,结果如下(假设 jar 名称为 userdao.jar):

Uploaded: myNexusIp/nexus/content/repositories/snapshots/xxx/1.0-SNAPSHOT/userdao-1.0-20170512.111840-6.jar 
Uploaded: myNexusIp/nexus/content/repositories/snapshots/xxx/1.0-SNAPSHOT/maven-metadata.xml

构建成功,一切正常。

但是当我构建另一个依赖于userdao.jar的maven项目时,出现如下错误:

Could not find artifact userdao:jar:1.0-20170512.111840-6 in public (http://myNexusIp/nexus/content/groups/public/)

定位后发现nexus中maven-metadata.xml的时间戳比实际jar的时间戳多一秒!
如下:

  • maven-metadata.xml: 1.0-20170512.111840-6
  • 实际存在的快照jar:userdao-1.0-20170512.111839-6.jar

因为userdao-1.0-20170512.111840-6.jar 在 Nexus 中不存在,所以 正确的应该是userdao-1.0-20170512.111839-6.jar,所以会出错。

谁能告诉我为什么以及如何解决?

【问题讨论】:

  • 您是否检查过您的日志文件,userdao-.. 在您的整个构建中仅上传一次...
  • 你好khmarbaise,谢谢你的提醒,我发现jenkins build log中userdao.jar的maven-metadata.xml总是更新2次。并且如果 2 次更新在一秒钟内没有错误,一旦 2 次更新在不同的秒内(例如,一个是 111839,另一个是 111840),就会发生错误。
  • 嗨 khmarbaise,为什么上传文件执行了两次,我该如何解决?
  • 您好,您是如何构建 jar 名称的,请您添加您的 pom 我正在经历同样的问题,这可能对 @IcyLemon 有帮助

标签: maven jenkins nexus maven-metadata


【解决方案1】:

我在使用 maven 3.3.9 时遇到了同样的问题。在我的情况下,升级到 maven 3.5.4 解决了这个问题,在默认部署阶段不再“两次”。

【讨论】:

    【解决方案2】:

    我在使用 Maven 3.3.9 时遇到了同样的问题。通过升级到 Maven 3.5.4 进行测试,但问题仍然存在。 maven-metadata.xml 上传两次的问题是由于spotbug maven plugin v3.1.3。 它在我测试过的最新的 spotbug maven 插件版本 3.1.12 中得到了解决。

    【讨论】:

      【解决方案3】:

      这已被确认为 maven-3.5 问题https://issues.apache.org/jira/browse/MNG-6240 并已修复应用。带有修复程序的 maven-3.5.1 版本在这里投票https://www.mail-archive.com/dev@maven.apache.org/msg114783.html

      【讨论】:

      • Maven 3.5.2 现在是 released ,这个问题应该已经解决了!
      【解决方案4】:

      我实际上发现了相反的情况。从 Maven 3.3.9 升级到 3.5.0 后,我可以可靠地部署工件,其中 Nexus 上 metadata.xml 文件中出现的时间戳与部署的实际文件相比是不正确的。

      通过降级(回到 3.3.9)一切正常。 metadata.xml 版本和时间戳始终匹配。

      也许这与 Maven 3.5.0 升级移除 Aether 有关?

      【讨论】:

      • 我同意。 +1。我还看到了 maven 3.5.0 时间戳不正确的实例。对于任何 mvn deploy-file 任务,我现在坚持使用 3.3.9。
      • 是的,Maven 3.5.0 中存在一个问题:issues.apache.org/jira/browse/MDEPLOY-221 已在 3.5.1 中修复
      【解决方案5】:

      我将maven从3.3.9更新到3.5.0,发现maven-metadata.xml上传了一次,问题解决了! 所以我猜这是 maven 3.3.9 中的一个错误,我目前的解决方案是将 maven 更新到 3.5.0。

      【讨论】:

      • 有趣的 +1 我没有看到 maven.apache.org/docs/3.5.0/release-notes.html 中列为固定问题
      • 我也没有看到,但是经过反复测试我确定:在不更改任何其他配置的情况下,使用maven 3.3.9时,maven-metadata.xml总是上传两次,一旦切换到maven 3.5.0,只上传一次。
      【解决方案6】:

      首先要尝试在您上传快照工件的存储库中重建元数据。

      见“Managing Scheduled Tasks

      重建 Maven 元数据文件

      此任务将使用正确的信息重建 maven-metadata.xml 文件,还将验证指定存储库/组中所有文件的校验和 (.md5/.sha1)。
      通常,此任务是手动运行以修复损坏的存储库。

      【讨论】:

      • 您好 VonC,我已经在我的 Nexus 中创建了一个任务“重建 Maven 元数据文件”并根据您的建议运行它,我会跟踪它,非常感谢。
      • 重建元数据是一种修复操作,一般情况下不需要。 maven 负责下载、更新和上传 maven-metadata.xml 文件。如上所示,这个问题是由 maven 构建中的问题引起的(它上传了两次)。
      • @rseddon 第二次上传应该更新了 maven-metadata.xml,不是吗?
      • @Vonc "Rebuild Maven Metadata Files" 我昨天创建的已经执行但问题仍然存在,所以我猜根本原因是 maven-metadata.xml 被上传了两次,两次没有在同一秒。我想知道为什么要上传两次?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-10
      • 1970-01-01
      • 1970-01-01
      • 2010-12-11
      • 1970-01-01
      • 2015-11-12
      相关资源
      最近更新 更多