maven-2 - org - nexus repository
Uso de la API Nexus rest para obtener la última versión de artefacto para groupid/artifactId determinado (4)
Estoy tratando de usar la APLICACIÓN REST del nexo para obtener la última versión de un artefacto experto. Puedo buscar la versión específica que estoy buscando usando http://repo.local/service/local/data_index?a=local-turbogears-server&from=0&g=com.turbo&c=bin&v=1.1.9
y si eliminar el parámetro de versión. Puedo ver todas las versiones. Sin embargo, cuando intento usar RELEASE o ÚLTIMA VACUNACIÓN como la versión, entonces devuelve cero resultados. Comprobé maven-metadata.xml en el disco en nexus y hay entradas para la última versión. ¿Hay algún otro paso que deba seguir para devolver la última versión?
Actualmente estoy usando:
Nexus v. 1.9.2
Después de probar el servicio REST con la versión LATEST
y descubrir que no siempre funciona (Ver la respuesta @Stanislav ) terminé creando este comando Linux de una línea para analizar el archivo 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
Simplemente cambie la url apropiada, y debería funcionar para usted.
Aclamaciones
En Nexus, LATEST está diseñado para funcionar con plugins maven en lugar de artefactos regulares. Nexus simplemente no garantiza lo ÚLTIMO para trabajar en otros casos. Si ahora mismo le devuelve la versión correcta del artefacto, mañana puede dejar de funcionar, por ejemplo, si ejecuta Reconstruir metadatos para el repositorio de Nexus. ¿Desea confiar en el mecanismo que puede romperse en cualquier momento (por ejemplo, durante el proceso de liberación?). Yo dudo. Lee este artículo para obtener más información.
Para encontrar la última versión de artefacto, debe escribir su propia secuencia de comandos para invocar la API de búsqueda y ordenar las versiones de artefactos como desee. O puede escribir su propio complemento para Nexus.
Alternativamente, si su flujo de trabajo lo permite, puede usar SNAPSHOTs en lugar de versiones de lanzamiento. Si no incrementa la parte numérica, xyz-SNAPSHOT
siempre devolverá el último binario.
Último punto: no use las últimas versiones de artefactos, en la gran mayoría de los casos, si tiene un caso de uso así, entonces algo está mal con sus implementaciones (o lo que sea que esté haciendo). En general, debe conocer la versión exacta que va a utilizar.
Esta respuesta ha sido copiada de: https://.com/a/39485361/1450799
Tengo el sistema operativo Linux y no tengo acceso a la API REST, así que utilicé los siguientes comandos para obtener la última versión de instantáneas de Nexus:
Un ejemplo de instantáneas maven-metadata.xml del repositorio 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>
Extrayendo de la última etiqueta XML dentro de 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"
Extracción de la etiqueta XML de la versión dentro de 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"
El resultado de ambos comandos hasta el día de hoy 14 de septiembre de 2016 es:
5.3.0-SNAPSHOT
La siguiente URL recuperará la última versión de log4j 1.2.x:
Documentado here
Actualizar
Ejemplo usando curl:
curl -L "http://repository.sonatype.org/service/local/artifact/maven/redirect?r=central-proxy&g=log4j&a=log4j&v=LATEST" -o log4j.jar
Actualización para Log4j2
Log4j 1.2 es EOL desde el verano de 2015 y se sabe que está roto en Java 9.
Aquí está el enlace para los artefactos Log4j: