2017-02-21 2 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. 메모리를 늘린 후에도 동일한 결과가 나타났습니다. 반환 할 구성 요소가 너무 많아 보이지만 내 넥서스 저장소에는 그룹, 이름 및 버전이있는 구성 요소가 하나만 있습니다.

이 쿼리에는 어떤 문제가 있습니까?

누군가가이 어려움을 겪었습니까 (nexus2 및 나머지 api에서는 매우 편리했습니다). 그루비 스크립트로 구성 요소 정보를 검색 할 수 있습니까? 사실

+0

'PARAM ('###) (빌드)'-. 작은 따옴표 누락? – Rao

+0

오류는 코드 그림에만 있습니다. 실제 코드에는 누락 된 따옴표가 없습니다. – olivier

답변

0

okee,

는 내 요구는 다음과 같습니다 내가 마지막 릴리스 버전 및 그룹과 인공물에 의한 구성 요소의 날짜를 검색 할 수 있습니다. groovy API 옵션을 분명히 남겨 둡니다.

발견 된 방법은 extdirect API 사용으로 구성됩니다. 이 "나머지"API는 넥서스 프론트 엔드가 백엔드와 통신하는 데 사용됩니다. 설명서가 없습니다.

그룹 및 아티팩트별로 구성 요소에서 모든 버전을 검색하려면 extdirect API를 호출합니다. 결과를 구문 분석하여 릴리스에서 마지막 버전을 얻습니다 (스냅 샷 및 릴리스). 이 호출이 모든 저장소의 모든 버전을 검색하고 거대 할 수 있으므로 실제로 좋지 않습니다.

마지막 릴리스 버전의 구성 요소 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;" 
 
}

관련 문제