2017-02-21 5 views
1

groupIdartefactIdからコンポーネントやアセットをリクエストする方法を検索します。nexus3 api groupIdとartifactIdからコンポーネントを検索する方法

このドキュメントでは、このリクエストの作成方法についてのヘルプを提供しています。

This docは大きな助けとなりました。

残念ながら、それは私の必要性を解決するのに十分ではないですし、私はそのようなgroupIdartefactIdからコンポーネントを要求するクエリを作成しよう:私は私のスクリプトを果たした

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

前回はそれがjava.lang.StackOverflowErrorをthrowed。メモリを増やした後も同じ結果が得られました。返すコンポーネントが多すぎるようですが、私のネクサスリポジトリには、そのようなグループ、名前、バージョンのコンポーネントが1つしかありません。

このクエリで何が問題になっていますか?

誰かがこの難しさに合格しましたか(それはnexus2と残りのAPIでとても簡単でした!)、コンポーネント情報をGroovyスクリプトで取得しますか?

+0

'のparam( '###)(ビルド)' - 。単一引用符が不足して? – Rao

+0

エラーはコード例の中にのみ記載されています。実際のコードには見逃しがありません。 – olivier

答えて

0

okee、

は、実際に私のニーズは、次のとおりです。 私は最後のリリースバージョンとグループとアーティファクトによって、部品のその日付を取得したいです。 groovy APIオプションは間違いなく残しておきます。

私が見つけた方法は、extdirect APIの使用にあります。この「休憩」APIは、バックエンドと通信するためにネクサスフロントエンドによって使用されます。ドキュメントは存在しません。

私はextdirect apiを呼び出して、groupとartefactによってコンポーネントからすべてのバージョンを取得します。私は結果を解析して、リリース(スナップショットとリリース)の最後のバージョンを取得します。 この呼び出しがすべてのリポジトリのすべてのバージョンを取得し、膨大なものになる可能性があるので、実際にはうまくいきません。

最後のリリースバージョンのコンポーネントIDからリリース日を見つけるextdirect apiの別の呼び出し。

いつかネクサスが有用な残りのAPIの公式文書を公開することを願っています。

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;" 
 
}

関連する問題