maven 在 Nexus 上找不到现有的快照工件

maven 在 Nexus 上找不到现有的快照工件

不幸的是,我无法确定是什么原因造成的,但在更新我的项目后,主项目中找不到其中一个依赖项。我不知道为什么只有这个会导致问题,而其他的都不会。mvn -U clean package输出如下:

...
Downloading: http://172.22.1.123:8080/repository/my-snapshots/
com/company/mypkg/dep1/1.4-SNAPSHOT/maven-metadata.xml
Downloaded: http://172.22.1.123:8080/repository/my-snapshots/
com/company/mypkg/dep1/1.4-SNAPSHOT/maven-metadata.xml (993 B at 97.0 KB/sec)
Downloading: http://172.22.1.123:8080/repository/my-snapshots/
com/company/mypkg/dep2/1.7-SNAPSHOT/maven-metadata.xml
Downloaded: http://172.22.1.123:8080/repository/my-snapshots/
com/company/mypkg/dep1/1.7-SNAPSHOT/maven-metadata.xml (993 B at 97.0 KB/sec)
Downloading: http://172.22.1.123:8080/repository/my-snapshots/
com/company/mypkg/dep3/1.2-SNAPSHOT/dep3-1.2-SNAPSHOT.jar
...
[ERROR] Failed to execute goal on project e-backend-impl:
Could not resolve dependencies for project
com.company:dep3:jar:1.2-SNAPSHOT: Could not find artifact
com.company:dep3:jar:1.2-SNAPSHOT in com.company.snapshot.repo
(http://172.22.1.123:8080/repository/my-snapshots) -> [Help 1]

Maven的settings.xml的快照仓库配置如下:

<repository>
  <id>com.company.snapshot.repo</id>
  <name>Company's snapshot repository</name>
  <url>http://172.22.1.123:8080/repository/my-snapshots</url>
  <snapshots>
    <enabled>true</enabled>
    <updatePolicy>always</updatePolicy>
  </snapshots>
  <releases>
    <enabled>false</enabled>
  </releases>
</repository>

我尝试过但没有帮助的事情:

  • 在本地存储库中安装了 dep3。
  • 设置updatePolicy为每日或从不
  • mvn -o本地安装 dep3 后
  • 删除本地存储库中的 dep3 快照目录

Maven 版本是 3.3.9,Nexus 版本是 3.12.0。我能想到的一个提示是,对于 dep3,mvn 不会先尝试下载 maven-metadata.xml,而是直接下载 dep3-1.2-SNAPSHOT.jar,而 Nexus 上不存在这个文件,因为实际的库名称中有一个时间戳。但我不知道为什么会发生这种情况,而且只发生在 dep3 上,而不发生在 dep2 和 dep1 上。mvn 为什么会忽略本地部署的快照也是一个谜。

任何帮助将不胜感激。

编辑:

确定了 Nexus 的一个问题,该问题很可能是导致该问题的原因。maven-metadata.xml项目的主要内容(不是快照)未将部署的快照版本标记为最新版本。它看起来像这样:

<metadata>
  <groupId>com.company.mypkg</groupId>
  <artifactId>dep3</artifactId>
  <versioning>
    <latest>1.1-SNAPSHOT</latest>
    <versions>
      <version>1.0-SNAPSHOT</version>
      <version>1.1-SNAPSHOT</version>
      <version>1.2-SNAPSHOT</version>
    <versions>
    <lastUpdated>20190502080656</lastUpdated>
  </versioning>
</metadata>

最终这也是为什么本地快照也没有被考虑的原因。现在的问题是,这种情况是怎么发生的。我也再次部署到了 Nexus,但标签latest仍然显示较旧的快照版本。

编辑2:

所以它又能正常工作了,但我不知道为什么。我做了什么:从我们的 CI 再次将 dep3 部署到 Nexus。然后,在 dep3 目录中:

mvn -U -DupdateReleaseInfo clean install

看看本地存储库中的 release 标签发生了什么(显然什么也没发生)。然后主项目工作正常。我删除了本地存储库中的 dep3 目录,它仍然工作正常。Nexus 中的 maven-metadata.xml 仍然没有改变(latest标签指向旧版本)。所以就是这样不是问题。

我找到了这篇文章: https://support.sonatype.com/hc/en-us/articles/213464638-为什么-are-the-latest-and-release-tags-in-maven-metadata-xml-not-being-updated-after-deploying-artifacts-

它说该latest字段仅用于部署 maven 插件,这毫无意义,因为 dep3 绝对不是 maven 插件。但是这篇文章很旧了。

相关内容