Saltar al contenido

Uso de la API de descanso de Nexus para obtener la última versión de artefacto para el groupid / artifactId dado

Solución:

La siguiente URL recuperará la última versión de log4j 1.2.x:

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

Documentado aquí

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:

  • log4j-api: https://repository.sonatype.org/service/local/artifact/maven/redirect?r=central-proxy&g=org.apache.logging.log4j&a=log4j-api&v=LATEST
  • log4j-core: https://repository.sonatype.org/service/local/artifact/maven/redirect?r=central-proxy&g=org.apache.logging.log4j&a=log4j-core&v=LATEST

En Nexus LATEST está diseñado para trabajar con complementos de maven en lugar de con artefactos regulares. Nexus simplemente no garantiza que lo ÚLTIMO funcione en otros casos. Si ahora mismo te devuelve la versión correcta del artefacto, mañana puede dejar de funcionar, por ejemplo, si ejecutas Rebuild Metadata para el repositorio de Nexus. ¿Quiere confiar en el mecanismo que puede romperse en cualquier momento (por ejemplo, durante el proceso de liberación?). Yo dudo. Lea este artículo para obtener más información.

Para encontrar la ÚLTIMA versión del artefacto, debe escribir su propio script para invocar la API de búsqueda y ordenar las versiones del artefacto 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, entonces x.y.z-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 de este tipo, entonces algo anda mal con sus implementaciones (o lo que sea que esté haciendo). En general, debes saber la versión exacta que vas a utilizar.

Esta respuesta se ha copiado de: https://stackoverflow.com/a/39485361/1450799

Tengo el sistema operativo Linux y no tengo acceso a la API REST, por lo que utilicé los siguientes comandos para obtener la última versión de las 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"

Extrayendo 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 --version-sort | uniq | tail -n1 | 
sed -e "s#(.*)(<version>)(.*)(</version>)(.*)#3#g"

El resultado de ambos comandos hasta hoy 14 de septiembre de 2016 es:

5.3.0-SNAPSHOT
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *