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

how to force sonatype nexus 3 to recreate maven-metadata.xml for maven repository?

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

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

备注:

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

获得

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

我使用 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 是最新的

我通过监控网络流量作弊,结果如下:

curl \
    --silent \
    --user $NEXUS_USERNAME:$NEXUS_PASSWORD \
    --header "Content-Type: application/json" \
    --data '{"action":"coreui_Repository","method":"rebuildIndex","data":[$NEXUS_REPOSITORY],"type":"rpc","tid":0}' \
    http://$NEXUS_SERVER/service/extdirect

这对我有用。尽管 "tid" 应该是一些自动递增的数字,但它似乎并不重要。