Saltar al contenido

¿Cómo le digo a Maven que use la última versión de una dependencia?

Esta es la solución más válida que te podemos dar, pero obsérvala detenidamente y analiza si se puede adaptar a tu proyecto.

Solución:

NOTA:

El mencionado LATEST y RELEASE se han eliminado las metaversiones para las dependencias de complementos en Maven 3 “por el bien de las construcciones reproducibles”, hace más de 6 años. (Todavía funcionan perfectamente bien para dependencias regulares). Para dependencias de complementos, consulte este Solución compatible con Maven 3.


Si siempre desea usar la versión más reciente, Maven tiene dos palabras clave que puede usar como alternativa a los rangos de versiones. Debe usar estas opciones con cuidado, ya que ya no tiene el control de los complementos / dependencias que está usando.

Cuando depende de un complemento o una dependencia, puede usar el valor de una versión de LATEST o RELEASE. LATEST se refiere a la última versión publicada o instantánea de un artefacto en particular, el artefacto implementado más recientemente en un repositorio en particular. RELEASE se refiere a la última versión que no es una instantánea en el repositorio. En general, no es una buena práctica diseñar software que dependa de una versión no específica de un artefacto. Si está desarrollando software, es posible que desee utilizar RELEASE o LATEST para su comodidad, de modo que no tenga que actualizar los números de versión cuando se publique una nueva versión de una biblioteca de terceros. Cuando lanza software, siempre debe asegurarse de que su proyecto dependa de versiones específicas para reducir las posibilidades de que su compilación o proyecto se vea afectado por una versión de software que no está bajo su control. Utilice ÚLTIMO y LIBERAR con precaución, si es que lo hace.

Consulte la sección de sintaxis de POM del libro de Maven para obtener más detalles. O consulte este documento sobre rangos de versiones de dependencia, donde:

  • Un corchete ( [ & ] ) significa “cerrado” (inclusive).
  • Un paréntesis ( ( Y ) ) significa “abierto” (exclusivo).

A continuación, se muestra un ejemplo que ilustra las distintas opciones. En el repositorio de Maven, com.foo:my-foo tiene los siguientes metadatos:


  com.foo
  my-foo
  2.0.0
  
    1.1.1
    
      1.0
      1.0.1
      1.1
      1.1.1
      2.0.0
    
    20090722140000
  

Si se requiere una dependencia de ese artefacto, tiene las siguientes opciones (por supuesto, se pueden especificar otros rangos de versiones, solo mostrando los relevantes aquí):

Declare una versión exacta (siempre se resolverá en 1.0.1):

[1.0.1]

Declare una versión explícita (siempre se resolverá en 1.0.1 a menos que ocurra una colisión, cuando Maven seleccionará una versión coincidente):

1.0.1

Declare un rango de versiones para todos los 1.x (actualmente se resolverá en 1.1.1):

[1.0.0,2.0.0)

Declare un rango de versiones abierto (se resolverá en 2.0.0):

[1.0.0,)

Declare la versión como ÚLTIMA (se resolverá a 2.0.0) (eliminada de maven 3.x)

LATEST

Declare la versión como RELEASE (se resolverá en 1.1.1) (eliminado de maven 3.x):

RELEASE

Tenga en cuenta que, de forma predeterminada, sus propias implementaciones actualizarán la entrada “más reciente” en los metadatos de Maven, pero para actualizar la entrada “versión”, debe activar el “perfil de versión” del super POM de Maven. Puede hacer esto con “-Prelease-profile” o “-DperformRelease =true”


Vale la pena enfatizar que cualquier enfoque que permita a Maven elegir las versiones de dependencia (ÚLTIMA, RELEASE y rangos de versión) puede dejarlo abierto a problemas de tiempo de compilación, ya que las versiones posteriores pueden tener un comportamiento diferente (por ejemplo, el complemento de dependencia ha cambiado previamente a un predeterminado valor de true para false, con resultados confusos).

Por lo tanto, generalmente es una buena idea definir versiones exactas en las versiones. Como señala la respuesta de Tim, el complemento de versiones de maven es una herramienta útil para actualizar las versiones de dependencia, en particular las versiones: use-latest-versions y las versiones: use-latest-releases objetivos.

Ahora sé que este tema es antiguo, pero al leer la pregunta y la respuesta proporcionada por el OP, parece que el complemento de versiones de Maven podría haber sido una mejor respuesta a su pregunta:

En particular, los siguientes objetivos podrían ser útiles:

  • versiones: use-latest-versions busca en el pom todas las versiones que hayan sido una versión más reciente y las reemplaza con la última versión.
  • versiones: use-latest-releases busca en el pom todas las versiones que no sean SNAPSHOT que hayan sido una versión más reciente y las reemplaza con la versión más reciente.
  • versiones: update-properties actualiza las propiedades definidas en un proyecto para que se correspondan con la última versión disponible de dependencias específicas. Esto puede ser útil si un conjunto de dependencias debe estar bloqueado en una versión.

También se proporcionan los siguientes otros objetivos:

  • versiones: display-dependency-updates escanea las dependencias de un proyecto y produce un informe de aquellas dependencias que tienen versiones más nuevas disponibles.
  • versiones: display-plugin-updates escanea los complementos de un proyecto y produce un informe de los complementos que tienen versiones más nuevas disponibles.
  • versiones: update-parent actualiza la sección principal de un proyecto para que haga referencia a la versión más reciente disponible. Por ejemplo, si utiliza un POM raíz corporativo, este objetivo puede ser útil si necesita asegurarse de que está utilizando la última versión del POM raíz corporativo.
  • versiones: update-child-modules actualiza la sección principal de los módulos secundarios de un proyecto para que la versión coincida con la versión del proyecto actual. Por ejemplo, si tiene un pom agregador que también es el padre de los proyectos que agrega y las versiones secundaria y primaria no están sincronizadas, este mojo puede ayudar a corregir las versiones de los módulos secundarios. (Tenga en cuenta que es posible que deba invocar Maven con la opción -N para ejecutar este objetivo si su proyecto está tan roto que no puede compilarse debido a que la versión no coincide).
  • versiones: bloqueo-instantáneas busca en el pom todas las versiones -SNAPSHOT y las reemplaza con la versión de marca de tiempo actual de ese -SNAPSHOT, por ejemplo, -20090327.172306-4
  • versiones: desbloquear-instantáneas busca en el pom todas las versiones de instantáneas bloqueadas con marca de tiempo y las reemplaza con -SNAPSHOT.
  • versiones: resolve-rangos encuentra dependencias usando rangos de versión y resuelve el rango a la versión específica que se está usando.
  • versiones: use-releases busca en el pom todas las versiones -SNAPSHOT que se han lanzado y las reemplaza con la versión de lanzamiento correspondiente.
  • versiones: use-next-releases busca en el pom todas las versiones que no sean SNAPSHOT que hayan sido una versión más reciente y las reemplaza con la siguiente versión.
  • versiones: use-next-versions busca en el pom todas las versiones que hayan sido una versión más reciente y las reemplaza con la siguiente versión.
  • versiones: commit elimina los archivos pom.xml.versionsBackup. Forma la mitad del “SCM del pobre hombre” integrado.
  • versiones: revertir restaura los archivos pom.xml de los archivos pom.xml.versionsBackup. Forma la mitad del “SCM del pobre hombre” integrado.

Solo pensé en incluirlo para cualquier referencia futura.

Por favor, eche un vistazo a esta página (sección “Rangos de versiones de dependencia”). Lo que podría querer hacer es algo como

[1.2.3,)

Estos rangos de versiones se implementan en Maven2.

No se te olvide dar recomendación a esta noticia si te fue útil.

¡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 *