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

2lpgd968  于 2023-01-20  发布在  Maven
关注(0)|答案(3)|浏览(354)

我使用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仍然找不到它们。
    • EDIT**:不完整列表可以使用wget http://my-server/nexus/repository/my-maven-repo/org/company/mylib_2.12/maven-metadata.xml获得
    • EDIT2**升级到nexus-3.13没有解决问题。
n53p2ov0

n53p2ov01#

我发现了一个变通方案,使用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是最新的
iyr7buue

iyr7buue2#

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

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

l7wslrjt

l7wslrjt3#

我知道这是一个老问题,但我偶然发现了这个问题,并认为我应该分享我的解决方案。我们有一个应用程序,我们使用REST API将工件上传到Nexus存储库,但这并没有创建正确的maven-metadata. xml文件。例如,对于com/test/artifact version 2.0.0,它创建com/test/artifact/2.0.0/maven-metadata.xml而不是com/test/artifact/maven-metadata.xml。gschias上面的回答有助于找到解决方案,但是他的回答是针对rebuildIndex任务的,这不是你想要的。你需要“修复-重建Maven存储库元数据”任务。不幸的是,没有REST API来创建任务,只能列出和运行。我在创建这个任务的时候也监控了网络流量。下面是一个解决方案,它以bash片段的形式为我工作:

# create the task
response=$(curl \
  --silent \
  --fail \
  --user $NEXUS_USERNAME:$NEXUS_PASSWORD \
  --header "Content-Type: application/json" \
  --data '{"action":"coreui_Task","method":"create","data":[{"id":"NX.coreui.model.Task-1","typeId":"repository.maven.rebuild-metadata","enabled":true,"name":"rebuild maven metadata","alertEmail":"","notificationCondition":"FAILURE","schedule":"manual","properties":{"repositoryName":"maven-hosted","groupId":"","artifactId":"","baseVersion":"","rebuildChecksums":"false"},"recurringDays":[],"startDate":null,"timeZoneOffset":"+00:00"}],"type":"rpc","tid":0}' \
  http://$NEXUS_SERVER/service/extdirect)

if [ $? -eq 0 ]; then
  taskid=$(echo $response | jq -r .result.data.id)
  if [[ "$taskid" != "null" ]]; then
    # run the task
    curl \
      --silent \
      --user $NEXUS_USERNAME:$NEXUS_PASSWORD \
      --header 'accept: application/json' \
      --header "Content-Type: application/json" \
      --request 'POST' \
      --data '' \
      http://$NEXUS_SERVER/service/rest/v1/tasks/${taskid}/run
  fi
fi

我们使用的是Nexus OSS 3.41。

相关问题