如何强制 sonatype nexus 3 为 maven 存储库重新创建 maven-metadata.xml?

Chr*_*aes 4 nexus maven sbt

sbt过去常常将新工件发布到 nexus-maven2 存储库 (my-maven-repo)。新的人工制品出现在 nexus 界面中。另一个 sbt 项目使用这些人工制品。使用确切要求时;他找到了那些,但是在使用范围时;他获取可用工件的列表,而该列表永远不会是最新的。

我尝试过的方法/解决方法及其结果:

  • 不工作:使用 nexus 接口 --> 存储库 --> my-maven-repo --> 重建索引
  • 不工作:(curl -v -u user:pass -X DELETE http://my-server/nexus/service/local/metadata/repositories/my-maven-repo/content错误:此 URL 不支持 Http 方法 DELETE)
  • 工作删除同一存储库中的另一个人工制品。但这并不是一个很好的解决方案。我不想开始删除人工制品,这需要管理员权限。

笔记:

  • 用不同的sbt版本测试,这似乎不是sbt问题;见相关问题
  • 连接版本 3.4.0-02
  • 使用 BETA API 我可以找到新版本 ( curl -X GET --header 'Accept: application/json' 'http://my-server/nexus/service/siesta/rest/beta/search?repository=my-maven-repo&name=mylib_2.12&version=2.4.0');但sbt在未指定确切版本号时仍然找不到它们。

编辑:可以使用获得不完整的列表wget http://my-server/nexus/repository/my-maven-repo/org/company/mylib_2.12/maven-metadata.xml

EDIT2 升级到 nexus-3.13 没有解决问题。

Chr*_*aes 5

我找到了一种使用存在于 nexus repository manager-3.13 中的新 API的解决方法

  • (使用 Web 界面):创建一个新任务以重新创建所有托管的 Maven 存储库 ( Repair - Rebuild Maven repository metadata (maven-metadata.xml))
  • curl -v -u user:pass -X GET http://my-server/nexus/service/rest/v1/tasks 获取此任务的 id
  • curl -v -u user:pass -X POST http://my-server/nexus/service/rest/v1/tasks/c42ab5f5-4bd6-4ed3-b2f1-d061c24a9b90/run 触发重新创建所有 maven-metadata.xml

缺点:

  • 需要管理员权限
  • 之后需要额外的步骤sbt publish来确保 maven-metadata.xml 是最新的

  • 在 maven 存储库中,执行部署的工具负责更新 maven-metadata.xml 文件。这就是 Maven 的工作方式。听起来您部署这些 jar 的方式有问题,没有必要让 Nexus 重建这些文件。 (3认同)