2010-05-05 9 views
7

¿Hay una manera de saber experto (cuando se hace mvn package, sitio mvn o ...) no resolver las dependencias del repositorio local?Cómo prevenir experto para resolver dependencias de repositorio local

Antecedentes de esta pregunta: A veces tengo problemas cuando las dependencias previamente almacenadas en caché (por ejemplo, SomeProject-0.7-ALPHA) ya no están disponibles en el repositorio remoto. En mi versión local, todo funciona bien, ya que la dependencia se ha almacenado en caché anteriormente. Tan pronto como comparta mi pom con otros, pueden tener problemas, ya que no tienen una versión en caché de esa dependencia y la dependencia ya no se puede resolver desde el repositorio remoto.

Cualquier ayuda será apreciada. ¡Gracias por adelantado!

+0

¿Por qué la dependencia ya no está disponible en el repositorio remoto? Si hay una versión más nueva, ¿por qué no simplemente actualizarla? Si la nueva versión no es compatible con versiones anteriores, ¿por qué eliminar la anterior? –

+0

El problema es detectar el hecho de que la versión anterior ya no está disponible. No puedo verificar todas las dependencias manualmente y como estoy teniendo la versión local en caché del maven de dependencia no disponible no me dirá que hay un problema. –

+0

Entiendo su problema directo; Sin embargo, traté de señalar con mis preguntas que en mi humilde opinión podría haber un problema de proceso detrás de esto. Y en este caso, probablemente sea mejor resolver la causa raíz en lugar de buscar una solución alternativa. –

Respuesta

12

¿Hay alguna manera de decirle a maven (al hacer mvn package, mvn site o ...) que no resuelva las dependencias del repositorio local?

No, así es como funciona toda la resolución de dependencia (a través del repositorio local).

A veces tengo problemas cuando las dependencias previamente almacenadas en la memoria caché (por ejemplo, SomeProject-0.7-ALPHA) ya no están disponibles en el repositorio remoto.

Lo siento por decir lo obvio, pero la eliminación de las dependencias de un repositorio remoto es una práctica horrible y conduce a ... bueno, el tipo de problemas que enfrenta. Si es posible, evita hacer eso.

Tan pronto como comparto mi pom con otros, pueden tener problemas, ya que no tienen una versión en caché de esa dependencia y la dependencia ya no se puede resolver desde el repositorio remoto.

Una forma de comprobar que las cosas funcionan para otros serían a purga las dependencias del proyecto que vas a compartir desde su repositorio local y volver a resolverlos. Por supuesto, hacer esto manualmente sería realmente doloroso, pero la buena noticia es que el Maven Dependency Plugin tiene un objetivo purge-local-repository para eso.

mvn org.apache.maven.plugins:maven-dependency-plugin:2.1:purge-local-repository \ 
    -DreResolve=true \ 
    -DactTransitively=true \ 
    -Dverbose=true 

Si esto no funciona, entonces usted sabe que le falta algo y no puede ser resuelto ya que es básicamente lo que quiere saber. Pero también lo has perdido, así que haz una copia de seguridad de tu repositorio si esto te importa.

+0

Aceptado, como lo que estaba buscando es purge-local-repository. Espero que ya no lo necesite en el futuro. ¡Gracias! –

+0

@Nils De nada. Siéntase libre de [upvote también] (http://meta.stackexchange.com/questions/686/accepting-with-reswer-without-upvoting) si cree que tiene sentido esta respuesta aceptada :) –

+0

¿Qué tal para los complementos del proyecto? estaba usando. ¿Hay una purga para los complementos? purge-local-repository borra las dependencias, no los complementos. –

2

La prueba básica de una compilación maven es eliminar el repositorio local .m2/repository e intentar compilar (paquete mvn) y ver si está funcionando. Si no, tienes otros problemas aquí. Como se mencionó, el problema parecía ser el proceso con el que está trabajando. Si una dependencia ya no está disponible desde un repositorio remoto, hay otro problema. ¿Estás utilizando un administrador de repositorio, por ejemplo, Nexus, Archiva, Artifactory?

+0

Estaba pensando en eliminar/mover todo el repositorio local también, de hecho eso es lo que he hecho en algunos casos, pero esto no es tan óptimo. No estoy usando un administrador de repositorio. Los repositorios que estoy usando no están bajo mi control. Voy a tomar su opinión y cosas sobre mis procesos primero. Pensé que podría haber una bandera para desconectar el repositorio local, pero veo que esto sería solo una solución ... ¡Gracias por tu ayuda! –

+1

No hay indicador para desactivar el uso del repositorio local. Si no está utilizando un Administrador de Repos personalmente, debe pensar en establecerse en la compañía. Lo único que puede hacer con su repositorio local es cambiar la ubicación, pero eso es todo. – khmarbaise

+0

+1 por la sugerencia de configurar un repositorio de empresa/proyecto - Estaba a punto de sugerir lo mismo :-) –

Cuestiones relacionadas