2011-10-21 22 views
6

cuando estoy haciendo desarrollo, a menudo necesito cambiar una dependencia, pero no estoy listo para implementar mis cambios. Por ejemplo, estoy trabajando en el proyecto Foo y me doy cuenta de que necesito agregar un método a la biblioteca común. Antes de implementar este cambio en nuestro repositorio interno, me gustaría instalar los cambios en la biblioteca común (mvn install) y recompilar Foo para usar la biblioteca común en el repositorio local (tenga en cuenta que estoy usando todas las versiones de SNAPSHOT).¿Por qué maven usa mi repositorio interno antes de mi repositorio local?

Sin embargo, después de I mvn install mi biblioteca común, cuando vuelvo a compilar Foo no utiliza la nueva biblioteca común - sigue usando la última INSTANTÁNEA de biblioteca común en el repositorio interno. Si despliego la biblioteca común modificada, Foo la recoge inmediatamente.

¿Cómo puedo hacer que maven mire primero en el repositorio local?

ACTUALIZACIÓN: cuando el archivo se instala en el repositorio local, recibe un nombre como foo-1.0.0-SNAPSHOT.jar, pero cuando lo despliego, obtiene una marca de tiempo foo-1.0.0-20111104.191316-23.jar. Creo que esta es la razón por la cual el artefacto remoto se tira cada vez. ¿Alguna idea de por qué mvn install no funciona como mvn deploy? ¿Tiene que ver con el hecho de que tengo un repositorio de instantáneas configurado para implementar?

+0

¿Tiene una 'localRepository' en su [settings.xml] (http://maven.apache.org/settings.html) que apunta a un lugar que no existe? – millhouse

+0

Compare la fecha de su sistema con la fecha de su sistema interno de repositorio (p. Ej., Nexus). Si hay un largo camino por delante, sus marcas de tiempo "ganarán" – millhouse

Respuesta

3

De forma predeterminada, Maven busca nuevas versiones de artefactos SNAPSHOT una vez al día. Cuando realice esta comprobación, descargará SNAPSHOTS de los repos remotos que sean más nuevos que los que tiene localmente. O bien tus marcas de tiempo de artefacto no están sincronizadas y estás haciendo algo para anular la política de actualización de Maven (como calling it with -U o setting the udpatePolicy para "siempre"), o bien el repositorio local al que estás instalando el artefacto no es el mismo que tú re ejecutando posteriormente Maven contra. Lo que describes no es el comportamiento típico de Maven. Para obtener una mejor respuesta, brinde más detalles en su pregunta.

Un indicador que puede buscar: después de instalar su artefacto común, la próxima vez que compila Foo, ¿Maven descarga el artefacto común otra vez? Si es así, entonces realmente lo está obteniendo del control remoto, y necesita verificar su configuración de actualización. Si no, entonces tienes algo extraño sucediendo localmente.

+0

Gracias Ryan, claramente nadie podrá decirme exactamente qué está pasando sin más detalles. ¡Es útil saber que esto no es un comportamiento estándar en primer lugar, así que puedo investigar más! – schmmd

+0

Agregué algunos detalles más - vea mi ACTUALIZACIÓN al final de mi pregunta. – schmmd

+0

Desde hace un tiempo, Maven ha utilizado marcas de tiempo para identificar de manera única las versiones de instantáneas implementadas en un repositorio remoto, y "SNAPSHOT" es simplemente un alias para el artefacto de marca de tiempo más reciente. Creo que fue alrededor de 2.1.0 que eso comenzó? No cambia nada sobre tu problema. –

0

Puede probar esta opción. Esto funcionó para mí.

En el pom.xml principal de su proyecto, cambie la configuración de 'instantáneas' a 'falso'.

<repository> 
    <id>yourRepo</id> 
    <name>Repository</name> 
    <url>http://your.repo.com/repo</url> 
    <snapshots> 
     <enabled>false</enabled> 
    </snapshots> 
</repository> 
Cuestiones relacionadas