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

问题描述 投票:1回答:2

我使用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问题;见related question
  • nexus版本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并没有解决问题。

maven sbt nexus
2个回答
1
投票

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

0
投票

我通过监控网络流量来欺骗,最后得到以下结果:

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”应该是一些自动递增的数字,但它似乎并不重要。

© www.soinside.com 2019 - 2024. All rights reserved.