2010-04-06 15 views
11

Mi módulo A de maven depende de otro módulo maven B proporcionado por otras personas. Cuando ejecuto "mvn install" en A por primera vez, maven descarga B-1.0.jar de un repositorio remoto a mi repositorio Maven local. Mi módulo A funciona bien.¿Cómo actualizar el repositorio local de maven con los artefactos más nuevos de un repositorio remoto?

Mientras tanto, otras personas están implementando B-1.0.jar más nuevo en el repositorio remoto. Cuando ejecuto "mvn install" debajo de A nuevamente, maven no descarga el B-1.0.jar más nuevo desde el repositorio remoto a mi repositorio local. Como resultado, mi compilación del módulo A falla debido a los cambios de la API en B-1.0.jar.

Podría eliminar manualmente B-1.0.jar de mi repositorio local. Entonces maven descargaría el último B-1.0.jar del repositorio remoto la próxima vez cuando ejecute "mvn install".

Mi pregunta es cómo puedo dejar automáticamente que maven descargue los últimos artefactos de un repositorio remoto. Intenté establecer updatePolicy en "siempre". Pero eso no funcionó.

Respuesta

27

Maven nunca vuelve a descargar versiones - 1.0 se considera definitivo y las nuevas versiones deben usar una nueva versión.

Si el módulo B aún está en desarrollo, debe usar la versión 1.0-SNAPSHOT - las instantáneas son una versión especial de Maven que buscará actualizaciones, y cuando se implemente se almacena con la marca de tiempo y el número de compilación.

+1

Esto es muy útil. SNAPSHOT es solo para este propósito. – Richard

+0

Gracias Brett por la respuesta :) – pranay

2

Estoy de acuerdo con Brett, arriba: los nuevos lanzamientos deben usar versiones nuevas. Para su caso, las instantáneas son probablemente la mejor solución, pero otra cosa que también podría ser útil es usar dependency version ranges.

De esta manera se puede especificar una versión de
(1.0,)
que conlleva la aceptación de cualquier versión superior a 1,0.
o
[1.1.1,1.1.7]
aceptando cualquier cosa entre (incluidas) las versiones 1.1.1 y 1.1.7.
La notación siguiente sintaxis intervalo matemáticas estándar donde

[= inclusión en el intervalo
(= exclusión del intervalo

(en la escuela, siempre pensé de los corchetes como "explotación" ese elemento en , mientras que el paréntesis más suave "déjalo ir")

Esto puede ser útil en casos donde sus dependencias aún se encuentran en desarrollo frecuente y no desea confiar en nuevas instantáneas que podrían ser menos estables y más propensas a romperse su código. Puede especificar los rangos de seguridad y ajustar los límites hacia arriba o hacia abajo, como apropiado, con el tiempo

Cuestiones relacionadas