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

时间:2018-08-14 08:57:30

标签: maven sbt nexus

我使用sbt将新的工件发布到nexus-maven2存储库(my-maven-repo)。新的伪像出现在链接界面中。另一个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并不能解决问题。

2 个答案:

答案 0 :(得分:0)

我使用nexus存储库管理器-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是最新的

答案 1 :(得分: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”应该是一些自动递增的数字,但似乎并不重要。