Comment puis-je utiliser le Sonatype REST Api pour récupérer la version avec la version la plus élevée (dernière version temporelle)?
http://MY_REPOSITORY/nexus/service/local/lucene/search?a=ARTIFACT_NAME&v=ARTIFACT_VERSION
Passer une version de build en tant que ARTIFACT_VERSION
travaux. Qui passe v=LATEST
ou v=latest
ne renvoie PAS la dernière version.
Il n'est pas documenté que/service/local/lucene/search supporte "LATEST" comme paramètre de version [ link ] La documentation de l'api OSS rest indique que /service/local/artifact/maven
[ link ] (pour obtenir le fichier pom d'artefact) et /service/local/artifact/maven/content
[ link ] (pour obtenir le contenu réel du fichier) le supporte:
Version de l'artefact (obligatoire) Prend également en charge la résolution des versions "LATEST", "RELEASE" et snapshot ("1.0-SNAPSHOT").
Je pense donc que vous devriez utiliser l'un d'eux (vous devrez également les fournir avec repositoryId et groupId) par exemple:
http://MY_REPOSITORY/nexus/service/local/artifact/maven/content?r=repoId&g=groupName&a=art&v=LATEST
J'ai eu le même problème et l'ai résolu comme ceci en utilisant l'api de recherche 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}"
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 version de la balise XML 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 | 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
L'API de recherche Lucene permet également la recherche par mot clé pour la version:
http://<nexus_repository>/nexus/service/local/lucene/search?a=ARTIFACT_NAME&v=1.0.*
Après avoir essayé le service REST avec la version LATEST
(et découvert cela ne fonctionne pas toujours ), j'ai fini par créer cette commande Linux à une ligne pour analyser le metadata.xml
fichier:
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