web-dev-qa-db-fra.com

Utilisation de l'API Nexus Rest pour obtenir la dernière version d'artefact pour groupid / artifactId donné

J'essaie d'utiliser le nexus REST api pour obtenir la dernière version d'un artefact maven. Je peux accéder à la version spécifique que je recherche en utilisant http://repo.local/service/local/data_index?a=local-turbogears-server&from=0&g=com.turbo&c=bin&v=1.1.9 et si je supprime le paramètre de version, je peux voir chaque version. Cependant, lorsque j'essaie d'utiliser RELEASE ou LATEST comme version, il ne renvoie aucun résultat. J'ai vérifié le maven-metadata.xml sur le disque dans nexus et il y a des entrées pour la dernière et la version. Y a-t-il une autre étape que je dois prendre pour retourner la dernière version?

J'utilise actuellement:

Nexus v. 1.9.2

39
chrisst

L'URL suivante récupérera la dernière version de log4j 1.2.x:

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

Documenté ici

Mise à jour

Exemple utilisant curl:

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

Mise à jour pour Log4j2

Log4j 1.2 est EOL depuis l'été 2015 et est connu pour être cassé en Java 9.

Voici le lien pour les artefacts Log4j:

64
Mark O'Connor

Dans Nexus LATEST est conçu pour fonctionner avec les plugins maven plutôt qu'avec les artefacts normaux. Nexus ne garantit tout simplement pas que le DERNIER fonctionne dans d'autres cas. Si pour le moment, il vous renvoie la version correcte de l'artefact, demain cela pourrait cesser de fonctionner, par exemple si vous exécutez Reconstruire les métadonnées pour le référentiel Nexus. Voulez-vous compter sur le mécanisme qui peut se briser à tout moment (par exemple pendant le processus de libération?). Je doute. Lisez cet article pour plus d'informations.

Afin de trouver la dernière version d'artefact, vous devez soit écrire votre propre script pour appeler l'API de recherche et trier les versions d'artefact comme vous le souhaitez. Ou vous pouvez écrire votre propre plugin pour Nexus.

Alternativement, si votre flux de travail le permet, vous pouvez utiliser des INSTANTANÉS au lieu des versions. Si vous n'incrémentez pas la partie numérique, alors x.y.z-SNAPSHOT renverra toujours le dernier binaire.

Dernier point: n'utilisez pas les dernières versions d'artefacts, dans la grande majorité des cas si vous avez un tel cas d'utilisation, alors quelque chose ne va pas avec vos déploiements (ou quoi que vous fassiez). En général, vous devez connaître la version exacte que vous allez utiliser.

23

Cette réponse a été copiée depuis: https://stackoverflow.com/a/39485361/1450799

J'ai Linux OS et je n'ai pas accès à REST API, j'ai donc utilisé les commandes suivantes pour obtenir la dernière version des instantanés de Nexus:

Un exemple d'instantanés maven-metadata.xml du référentiel 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>

Extraction de la dernière balise XML dans 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"

Extraction de la balise XML de version dans maven-metadata.xml:

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

Le résultat des deux commandes jusqu'au 14 septembre 2016 est:

5.3.0-SNAPSHOT
15
Reza Rahimi

Après avoir essayé le service REST avec la version LATEST et découvert qu'il ne fonctionne pas toujours (Voir réponse @ Stanislav ), j'ai fini par créer ce Commande Linux à une ligne pour analyser le fichier 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

Modifiez simplement l'URL appropriée et cela devrait fonctionner pour vous.

À votre santé

3
idelvall