我搜索从groupId
和artefactId
请求组件或资产的方式。
文档提供了有关如何创建此请求的任何帮助。
This doc给了我很大的帮助。
不幸的是,这还不足以解决我的需求,我尝试创建查询来请求来自groupId
和artefactId
的组件:
Query.builder().where('group = ').param('###').and('name = ').param('###').and('version = ').param('###).build()
上次我播放我的剧本时,它抛出了java.lang.StackOverflowError
。增加内存后,我得到了相同的结果。似乎有太多的组件要返回,但在我的nexus存储库中,只有一个组件具有这样的组,名称和版本。
此查询有什么问题?
有没有人通过这个难题(使用nexus2和rest api这么容易!)并使用groovy脚本检索组件信息?
答案 0 :(得分:1)
这是我成功上传和使用的脚本。您可以轻松地为您的请求添加版本 - 参数将是,例如," snapshots-lib,com.m121.somebundle,someBundle,7.2.1-SNAPSHOT,all"。正如您所看到的,我决定在本地过滤序列,因为没有找到在查询版本参数中指定的方法。
{
"name": "listgroup",
"type": "groovy",
"content": "import org.sonatype.nexus.repository.storage.Query;
import org.sonatype.nexus.repository.storage.StorageFacet;
import groovy.json.JsonOutput;
def repositoryId = args.split(',')[0];
def groupId = args.split(',')[1];
def artifactId = args.split(',')[2];
def baseVersion = args.split(',')[3];
def latestOnly = args.split(',')[4];
def repo = repository.repositoryManager.get(repositoryId);
StorageFacet storageFacet = repo.facet(StorageFacet);
def tx = storageFacet.txSupplier().get();
tx.begin();
def components = tx.findComponents(Query.builder().where('group = ').param(groupId).and('name = ').param(artifactId).build(), [repo]);
def found = components.findAll{it.attributes().child('maven2').get('baseVersion')==baseVersion}.collect{def version = it.attributes().child('maven2').get('version');\"${version}\"};
// found = found.unique().sort();
def latest = found.isEmpty() ? found : found.last();
tx.commit();
def result = latestOnly == 'latest' ? JsonOutput.toJson(latest) : JsonOutput.toJson(found);
return result;"
}

答案 1 :(得分:0)
okee,
实际上我的需求是: 我想按组和人工制品检索最后一个版本及其组件的日期。 我绝对会留下groovy API选项。
我发现的一种方法是使用extdirect api。这个"休息" nexus frontend使用api与后端进行通信。没有文档。
我调用extdirect api来按组和artefact从组件中检索所有版本。我解析结果以获取发行版的最新版本(快照和发行版)。 它并不是很好,因为这个调用会检索所有存储库中的所有版本并且可能很大。
再次调用extdirect api从上一版本的组件ID中查找发布日期。
我希望有一天nexus会发布有用的休息api的官方文档。