2011-10-27 9 views
35

Sto cercando di utilizzare il nexus REST api per ottenere l'ultima versione di un artefatto di Maven. Sono in grado di cercare la versione specifica che sto cercando usando http://repo.local/service/local/data_index?a=local-turbogears-server&from=0&g=com.turbo&c=bin&v=1.1.9 e se rimuovo il parametro della versione posso vedere ogni versione. Tuttavia, quando provo a utilizzare RELEASE o ULTIME come versione, restituisce zero risultati. Ho controllato il file maven-metadata.xml su disco in nexus e ci sono voci per ultime e release. C'è un altro passo che devo prendere per restituire l'ultima versione?Utilizzo dell'API di riposo Nexus per ottenere la versione più recente degli artefatti per il groupid/manufatto ID

Attualmente sto usando:

Nexus v 1.9.2

risposta

57

Il seguente URL recupererà l'ultima versione di log4j 1.2.x:.

http://repository.sonatype.org/service/local/artifact/maven/redirect?r=central-proxy&g=log4j&a=log4j&v=LATEST

documentata here

Aggiornamento

Esempio con ricciolo:

curl -L "http://repository.sonatype.org/service/local/artifact/maven/redirect?r=central-proxy&g=log4j&a=log4j&v=LATEST" -o log4j.jar 

Aggiornamento per Log4j2

Log4j 1.2 è EOL dall'estate 2015 ed è conosciuto per essere rotto in Java 9.

ecco il link per i manufatti Log4j:

+1

sono stato in grado di scaricare la versione più recente del manufatto sostituendo 'locale/data_index?' Con '/ manufatto/Maven local/reindirizzare?' E l'aggiunta di un parametro repository. Inoltre, grazie per il collegamento alla documentazione =) – chrisst

+0

e se l'artefatto non è un file jar? Ho pubblicato una libreria di Android aar –

+2

@DeanWild aggiungi '& p = aar' – sbk

22

In Nexus LATEST è progettato per funzionare con i plug-in maven anziché con gli artefatti normali. Nexus semplicemente non garantisce che ULTIMI funzionino in altri casi. Se in questo momento ti restituisce la versione corretta del manufatto, domani questo potrebbe smettere di funzionare, ad es. se si esegue Ricostruisci metadati per il repository Nexus. Vuoi fare affidamento sul meccanismo che potrebbe rompersi in qualsiasi momento (ad esempio durante il processo di rilascio?). Io dubito. Leggi this article per ulteriori informazioni.

Per trovare la versione di artefatto LATEST è necessario scrivere il proprio script per richiamare l'API di ricerca e ordinare le versioni di artefatto come si desidera. Oppure puoi scrivere il tuo plugin per Nexus.

In alternativa, se il flusso di lavoro lo consente, è possibile utilizzare SNAPSHOT anziché versioni di rilascio. Se non si incrementa la parte numerica, allora x.y.z-SNAPSHOT restituirà sempre l'ultimo binario.

Ultimo punto: non utilizzare le versioni più recenti di manufatti, nella stragrande maggioranza dei casi, se si dispone di un caso del genere l'uso, allora c'è qualcosa che non va con le distribuzioni (o qualsiasi altra cosa si sta facendo). In generale dovresti conoscere la versione esatta che intendi utilizzare.

+0

Un semplice esempio di "ultima versione" sarebbe un ambiente di sviluppo. gli sviluppatori di solito vogliono fare cose sulla build più aggiornata, ad es. controllando come le loro ultime modifiche influiscono sul software completo su cui stanno lavorando. – erikbwork

+0

Per questo si costruisce una pipeline: la versione viene determinata nella fase Build e quindi viene passata ai lavori successivi. Non usi MAI PIÙ TARDI per questo, almeno perché finirai con una versione diversa distribuita in diverse parti della pipeline (a causa delle condizioni della gara). –

+0

Non aggiungere questo ai passaggi di automazione, naturalmente. Ma il tuo sviluppatore lo usa manualmente per 'wget' l'ultimo' install_bundle.tar.gz' (o 'pip installa ' etc) – erikbwork

10

Questa risposta è stata copiata da: https://stackoverflow.com/a/39485361/1450799

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:

An esempi di 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 al 14 settembre 2016 è il seguente:

5.3.0-SNAPSHOT 
+0

Non sai perché tutti i voti negativi? Questo approccio è particolarmente utile per quelli di noi che utilizzano Nexus 3, che non ha a lungo l'API REST –

+1

. So che esiste un badge in Stackoverflow che raggiunge dando un voto negativo a un post. Per questo motivo molte persone cercano e votano negativamente la prima cosa che non potrebbero continuare a ottenere il distintivo :) –

1

Dopo aver provato il servizio REST con la versione LATEST, e scoprire che non sempre funziona (vedere @Stanislav response) ho finito per la creazione di questo comando one-liner 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 

Proprio cambia l'URL appropriato e dovrebbe funzionare per te.

Acclamazioni

+1

Per Nexus 3.0 e successive non esiste più, è possibile utilizzare dannrob

+0

@dannrob grazie, aggiornato! – idelvall

+1

@dannrob Ho aggiornato lo script per supportare entrambe le opzioni – idelvall