NOTA:
¡Esta respuesta se aplica solo a Maven 2! Las mencionadas LATEST
y las RELEASE
metaversiones se han eliminado en Maven 3 "por el bien de las compilaciones reproducibles" , hace más de 6 años. Consulte esta solución compatible con Maven 3 .
Si siempre desea usar la versión más nueva, Maven tiene dos palabras clave que puede usar como alternativa a los rangos de versión. 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 versión LATEST o RELEASE. ÚLTIMO se refiere a la última versión lanzada o instantánea de un artefacto en particular, el artefacto implementado más recientemente en un repositorio particular. RELEASE se refiere a la última versión no instantánea en el repositorio. En general, no es una mejor 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 usar RELEASE o LATEST como una conveniencia para no tener 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 versión o proyecto se vea afectado por una versión de software que no esté bajo su control.
Consulte la sección Sintaxis POM del libro de Maven para más detalles. O vea este documento sobre los rangos de versión de dependencia , donde:
- Un corchete (
[
& ]
) significa "cerrado" (inclusive).
- Un paréntesis (
(
& )
) significa "abierto" (exclusivo).
Aquí hay un ejemplo que ilustra las diversas opciones. En el repositorio de Maven, com.foo:my-foo tiene los siguientes metadatos:
<?xml version="1.0" encoding="UTF-8"?><metadata>
<groupId>com.foo</groupId>
<artifactId>my-foo</artifactId>
<version>2.0.0</version>
<versioning>
<release>1.1.1</release>
<versions>
<version>1.0</version>
<version>1.0.1</version>
<version>1.1</version>
<version>1.1.1</version>
<version>2.0.0</version>
</versions>
<lastUpdated>20090722140000</lastUpdated>
</versioning>
</metadata>
Si se requiere una dependencia de ese artefacto, tiene las siguientes opciones ( por supuesto, se pueden especificar otros rangos de versión , solo mostrando los relevantes aquí):
Declare una versión exacta (siempre se resolverá a 1.0.1):
<version>[1.0.1]</version>
Declare una versión explícita (siempre se resolverá a 1.0.1 a menos que ocurra una colisión, cuando Maven seleccionará una versión coincidente):
<version>1.0.1</version>
Declare un rango de versión para todos los 1.x (actualmente se resolverá en 1.1.1):
<version>[1.0.0,2.0.0)</version>
Declare un rango de versión abierta (se resolverá a 2.0.0):
<version>[1.0.0,)</version>
Declare la versión como ÚLTIMA (se resolverá a 2.0.0) (eliminada de maven 3.x)
<version>LATEST</version>
Declare la versión como RELEASE (se resolverá en 1.1.1) (eliminada de maven 3.x):
<version>RELEASE</version>
Tenga en cuenta que, de manera 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" desde el super POM de Maven . Puede hacerlo con "-Prelease-profile" o "-DperformRelease = true"
Vale la pena enfatizar que cualquier enfoque que permita a Maven elegir las versiones de dependencia (ÚLTIMO, LIBERACIÓN 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 un valor predeterminado valor de verdadero a falso, con resultados confusos).
Por lo tanto, generalmente es una buena idea definir versiones exactas en los lanzamientos. 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-version y versiones: use-latest-releases .