我使用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
获得
- EDIT**:不完整列表可以使用
- EDIT2**升级到nexus-3.13没有解决问题。
3条答案
按热度按时间n53p2ov01#
我发现了一个变通方案,使用nexus存储库管理器3.13中的新API:
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是最新的iyr7buue2#
我通过监控网络流量作弊,结果如下:
这对我来说确实有效,尽管“tid”应该是一个自动递增的数字,但这似乎并不重要。
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片段的形式为我工作:
我们使用的是Nexus OSS 3.41。