2013-02-09 17 views
17

Come posso utilizzare Sonatype REST Api per recuperare la build con la versione più alta (ultima generazione temporale)?Sonatype Nexus REST Api recupera l'ultima versione di build

http://MY_REPOSITORY/nexus/service/local/lucene/search?a=ARTIFACT_NAME&v=ARTIFACT_VERSION 

Passando una versione build come ARTIFACT_VERSION opere. Passare v=LATEST o v=latest NON restituisce l'ultima build.

+1

possibile duplicato [Utilizzando l'API Nexus resto per ottenere la versione più recente delle risorse per data groupid/artficatid] (http: // stac koverflow.com/questions/7911620/using-the-nexus-rest-api-to-get-latest-artifact-version-for-given-groupid-artfic) –

risposta

28

Non è documentato che/servizio/local/Lucene/supporto ricerca "ultimo" come parametro di versione [link] Il resto documentazione API OSS afferma che /service/local/artifact/maven [link] (per accedere al file artefatto POM) e /service/local/artifact/maven/content [ link] (per ottenere l'effettivo contenuto del file) non supporta:

versione del manufatto (Obbligatorio) supporta la risoluzione di "ultima", "RELEASE" e le versioni snapshot ("1.0-sNAPSHOT") anche.

Quindi penso che si dovrebbe utilizzare uno di loro (si dovrà fornire loro anche con repositoryId e groupId) ad esempio:

http://MY_REPOSITORY/nexus/service/local/artifact/maven/content?r=repoId&g=groupName&a=art&v=LATEST 
+0

potresti usare & e = war o & e = jar come steinim ha suggerito sotto (btw la sua soluzione non stava funzionando per me) –

+0

grazie per la condivisione. da dove posso ottenere il rimborso? – OverrockSTAR

+2

Fai attenzione quando usi questo: se la versione più recente è stata impostata su un valore fisso nei metadati (su Sonatype Nexus succede quando viene "Ricostruito i metadati"), potresti ottenere una versione precedente del tuo artefatto anziché l'ultima, come spiegato qui: http://articles.javatalks.ru/articles/32 – Giuseppe

18

Ho avuto lo stesso problema e risolto in questo modo utilizzando l'API di ricerca Lucene:

if [[ "${REPO}" == "snapshots" ]]; then 
    version=$(curl --silent "http://${HOST}/nexus/service/local/lucene/search?g=${GROUP_ID}&a=${ARTIFACT}" | sed -n 's|<latestSnapshot>\(.*\)</latestSnapshot>|\1|p' | sed -e 's/^[ \t]*//' | tail -1) 
else 
    version=$(curl --silent "http://${HOST}/nexus/service/local/lucene/search?g=${GROUP_ID}&a=${ARTIFACT}" | sed -n 's|<latestRelease>\(.*\)</latestRelease>|\1|p' | sed -e 's/^[ \t]*//' | tail -1) 
fi 

curl -o ~/${ARTIFACT}-${VERSION}.zip -L -# "http://${HOST}/nexus/service/local/artifact/maven/redirect?r=${REPO}&g=${GROUP_ID}&a=${ARTIFACT}&e=zip&v=${VERSION}" 
3

Lucene ricerca API permetterà anche ricerca per parole chiave per la versione:

http://<nexus_repository>/nexus/service/local/lucene/search?a=ARTIFACT_NAME&v=1.0.* 
3

devo sistema operativo Linux e che non hanno accesso alle API REST, quindi ho utilizzato i seguenti comandi per ottenere l'ultima versione di istantanee da Nexus:

Un esempio istantanee Maven-metadata.xml dal repository WSO2:

$ curl -s "http://maven.wso2.org/nexus/content/repositories/snapshots/org/wso2/is/wso2is/maven-metadata.xml" 
<?xml version="1.0" encoding="UTF-8"?> 
<metadata> 
    <groupId>org.wso2.is</groupId> 
    <artifactId>wso2is</artifactId> 
    <versioning> 
    <latest>5.3.0-SNAPSHOT</latest> 
    <release></release> 
    <versions> 
     <version>5.1.0-SNAPSHOT</version> 
     <version>5.2.0-SNAPSHOT</version> 
     <version>5.3.0-SNAPSHOT</version> 
    </versions> 
    <lastUpdated>20160914062755</lastUpdated> 
    </versioning> 
</metadata> 

Estrazione da ultimo tag XML all'interno Maven-metadata.xml:

curl -s "http://maven.wso2.org/nexus/content/repositories/snapshots/org/wso2/is/wso2is/maven-metadata.xml" | \ 
grep "<latest>.*</latest>" | \ 
sed -e "s#\(.*\)\(<latest>\)\(.*\)\(</latest>\)\(.*\)#\3#g" 

estrazione da tag XML versione all'interno Maven-metadata.xml:

curl -s "http://maven.wso2.org/nexus/content/repositories/snapshots/org/wso2/is/wso2is/maven-metadata.xml" | \ 
grep "<version>.*</version>" | \ 
sort | uniq | tail -n1 | \ 
sed -e "s#\(.*\)\(<version>\)\(.*\)\(</version>\)\(.*\)#\3#g" 

Il risultato di entrambi i comandi fino ad oggi 14 Settembre 2016 è:

5.3.0-SNAPSHOT 
1

Dopo aver provato il servizio REST con la versione LATEST (e scoprendo it doesn't always work) ho finito per la creazione di questo one-liner comando di Linux per l'analisi del file metadata.xml:

wget -O - -o /dev/null https://repo1.maven.org/maven2/org/brutusin/wava/maven-metadata.xml | grep -Po '(?<=<version>)([0-9\.]+(-SNAPSHOT)?)' | sort --version-sort -r| head -n 1