nexus3 api如何从groupId和artifactId中搜索组件

时间:2017-02-21 13:05:27

标签: api groovy nexus

我搜索从groupIdartefactId请求组件或资产的方式。

文档提供了有关如何创建此请求的任何帮助。

This doc给了我很大的帮助。

不幸的是,这还不足以解决我的需求,我尝试创建查询来请求来自groupIdartefactId的组件:

Query.builder().where('group = ').param('###').and('name = ').param('###').and('version = ').param('###).build()

上次我播放我的剧本时,它抛出了java.lang.StackOverflowError。增加内存后,我得到了相同的结果。似乎有太多的组件要返回,但在我的nexus存储库中,只有一个组件具有这样的组,名称和版本。

此查询有什么问题?

有没有人通过这个难题(使用nexus2和rest api这么容易!)并使用groovy脚本检索组件信息?

2 个答案:

答案 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的官方文档。