如何强制 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 项目使用这些人工制品。使用确切要求时;他找到了那些,但是在使用范围时;他获取了可用工件的列表,但该列表永远不会是最新的。
我尝试过的方法/解决方法及其结果:
- 不工作: 使用 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
的问题;见
- 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 没有解决问题。
我使用 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" 应该是一些自动递增的数字,但它似乎并不重要。
我使用 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
的问题;见 - 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 没有解决问题。
我使用 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
获取这个任务的idcurl -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" 应该是一些自动递增的数字,但它似乎并不重要。