Recientemente, Apache Maven parece estar teniendo problemas de almacenamiento en caché. Realizar instalaciones limpias en nuestros proyectos con Windows Vista o Windows 7 a veces produce artefactos con los mismos datos que una compilación anterior, aunque los archivos del artefacto más nuevo deberían haberse actualizado.
¿Hay alguna manera de borrar este caché para obligar a Maven a desencadenar siempre una construcción limpia del artefacto local que se debe construir?
En particular, tenemos problemas para crear una aplicación web con el complemento de guerra. La versión de Maven es 3.0.3. La versión del complemento War es 2.1.1.
-U
bandera que actualizará los artefactos?mvn clean install
poner los nuevos artefactos en el repositorio local?mvn clean install -Dmaven.repo.local=/alternate/repo/location
Respuestas:
Elimine los artefactos (o el repositorio local completo) a
c:\Users\<username>\.m2\repository
mano.fuente
The action can't be completed because the folder or file in it is open in another program. Close the folder or file and try again.
mvn dependency:purge-local-repository
finalmente funcionóPara limpiar la memoria caché local, intente usar el complemento de dependencia.
mvn dependency:purge-local-repository
: Este es un intento de eliminar los archivos del repositorio local, pero siempre va y llena el repositorio local después de que se hayan eliminado las cosas.mvn dependency:purge-local-repository -DreResolve=false
: Esto evita que se vuelvan a resolver las dependencias, pero a veces parece que todavía va a la red.mvn dependency:purge-local-repository -DactTransitively=false -DreResolve=false
: Esto fue agregado por Paweł Prażak y parece funcionar bien. Usaría el tercero si desea que se vacíe el repositorio local, y el primero si solo desea tirar el repositorio local y obtener las dependencias nuevamente.fuente
<User_Name>/.m2
ubicación. No estoy seguro si sería la razón.¿Ha verificado / cambiado la configuración de UpdatePolicy para sus repositorios en su
settings.xml
.Intenta configurarlo
always
.fuente
<updatePolicy>
en mi pom.xml, pero hay<snapshotPolicy>
Yo haría lo siguiente:
Las banderas le dicen a maven que no intente resolver dependencias o golpear la red. Eliminar lo que ves localmente.
Y por si acaso, ignore los errores (
--fail-at-end
) hasta el final. Esto a veces es útil para proyectos que tienen un conjunto de dependencias algo desordenado o que dependen de un repositorio interno algo desordenado (sucede).fuente
Esto funciona en Spring Tool Suite v 3.1.0.RELEASE, pero supongo que también está disponible en Eclipse.
Después de eliminar los artefactos a mano (como se indica en palacsint arriba) en el
/username/.m2
directorio, vuelva a indexar los archivos haciendo lo siguiente:Ir:
Windows->Preferences->Maven->User Settings
menú.Haga clic en el
Reindex
botón al lado delLocal Repository
cuadro de texto. Haga clic en "Aplicar", luego en "Aceptar" y listo.fuente
Como algunas respuestas han señalado, a veces realmente desea eliminar el repositorio local por completo, por ejemplo, puede haber algunos artefactos que no se pueden purgar, ya que el pom ya no hace referencia a ellos.
Si desea tener esta eliminación incrustada en una fase maven, como por ejemplo
clean
, puede usarmaven-clean-plugin
y acceder al repositorio a través de la configuración, por ejemplo:fuente
Úselo
mvn dependency:purge-local-repository -DactTransitively=false -Dskip=true
si tiene complementos maven como uno de los módulos. De lo contrario, Maven intentará recompilarlos, descargando así las dependencias nuevamente.fuente
He tenido este mismo problema, y escribí una línea en shell para hacerlo.
Lo hice de una sola vez porque quería tener un proyecto de Jenkins para ejecutar esto simplemente cuando lo necesitara, para no tener que iniciar sesión en cosas, etc. Si te permites un script de shell para ello, puedes escribirlo más limpio:
Debería funcionar, pero no he probado todo ese script. (He probado el primer comando, pero no el script completo). Este enfoque tiene la desventaja de ejecutar primero un comando grande y complicado. Es idempotente, por lo que puede probarlo usted mismo. La eliminación es su propio comando después, y esto le permite probarlo todo y comprobar que hace lo que cree que hace, porque no debe confiar en los comandos de eliminación sin verificación. Sin embargo, es inteligente por una buena razón: es portátil. Respeta su archivo settings.xml. Si está ejecutando este comando y le dice a maven que use un archivo xml específico (el argumento -s o --settings), esto seguirá funcionando. Por lo tanto, no tiene que jugar con asegurarse de que todo sea igual en todas partes.
Es un poco manejable, pero es una forma decente de hacer negocios, en mi opinión.
fuente
Así que hay algunos comandos que puedes usar para limpiar
También puede ser útil eliminar la carpeta del repositorio de .m2.
fuente