如何以编程方式更新nexus中的maven元数据文件

问题描述 投票:0回答:4

我想以编程方式更新我的 Nexus 服务器中的 maven-metadata.xml 文件。我有什么办法可以做到这一点吗?我可以为此使用 eclipse aether API 吗?

java maven nexus aether maven-metadata
4个回答
2
投票

maven 元数据文件由 Maven 维护。 Nexus 在删除时更新它们,并有一个计划任务也可以更正这些文件。

但是,根据删除文件的方式,元数据可能不会更新。例如。如果您只是删除存储中的文件并且不使用 Nexus 应用程序。


0
投票

使用 Nexus RestAPI 调用让 Nexus 在部署后重建元数据,向

DELETE
发出
/service/local/metadata/repositories/<repo-id>/content
请求。

例如:

curl -v -u userID:password -X DELETE http://localhost:8081/nexus/service/local/metadata/repositories/snapshots/content/com/foo/some/artifact

0
投票

我知道这是一个老问题,但我偶然发现了同样的问题,并认为我会为下一个人分享我的解决方案。我们有一个应用程序,使用 REST API 将工件上传到 Nexus 存储库,但这不会创建正确的 maven-metadata.xml 文件。例如,对于 com/test/artifact 版本 2.0.0,它会创建 com/test/artifact/2.0.0/maven-metadata.xml,但不会创建 com/test/artifact/maven-metadata.xml。 Nexus 有一个“修复 - 重建 Maven 存储库元数据”任务,它将执行您想要的操作。不幸的是,没有 REST API 来创建任务,只能列出和运行。我在 Web UI 中创建此任务时监控了网络流量,并以 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。


0
投票

我解决这个问题的方法是使用 NEXUS 脚本。 我通过 NEXUS REST (POST v1/script) 发布了这个脚本

{ “名称”:“通过脚本重建maven元数据”, “内容”:“导入org.sonatype.nexus.repository.maven.MavenMetadataRebuildFacet; 导入 groovy.json.JsonSlurper;

        log.info('rebuild-maven-metadata-by-script started');
        def request = new JsonSlurper().parseText(args);
        assert request.repoName: 'repoName parameter is required';
        assert request.groupId: 'groupId parameter is required';
        assert request.artifactId: 'artifactId parameter is required';
        def repo = repository.repositoryManager.get(request.repoName);
        MavenMetadataRebuildFacet mavenHostedFacet = repo.facet(MavenMetadataRebuildFacet.class);
        mavenHostedFacet.rebuildMetadata(request.groupId, request.artifactId, null, false, false);
        log.info('rebuild-maven-metadata-by-script completed');",

“类型”:“绝妙” }

该脚本具有存储库名称、groupId 和artifactId 参数。 然后可以通过 NEXUS REST (POST /v1/script/{name}/run) 调用它

我使用的是NEXUS OSS 3.62.0

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