¿Cómo forzar la actualización de Maven?

731

Importé mi proyecto que ya funcionaba en otra computadora y comenzó a descargar dependencias.

Al parecer, mi conexión a Internet se bloqueó y ahora recibo lo siguiente:

    >Build errors for comics; org.apache.maven.lifecycle.LifecycleExecutionException:
    Failed to execute goal on project comicsTest: Could not resolve dependencies for project comicsTest:comicsTest:war:0.0.1-SNAPSHOT:
    The following artifacts could not be resolved:
    org.springframework:spring-context:jar:3.0.5.RELEASE,
    org.hibernate:hibernate-entitymanager:jar:3.6.0.Final,
    org.hibernate:hibernate-core:jar:3.6.0.Final,
    org.hibernate:hibernate-commons-annotations:jar:3.2.0.Final,
    org.aspectj:aspectjweaver:jar:1.6.8,
    commons-lang:commons-lang:jar:2.5,

    >mysql:mysql-connector-java:jar:5.1.13: Failure to transfer org.springframework:spring-context:jar:3.0.5.RELEASE from http://repo1.maven.org/maven2 was cached in the local repository, resolution will not be reattempted until the update interval of central has elapsed or updates are forced.

    >Original error: Could not transfer artifact org.springframework:spring-context:jar:3.0.5.RELEASE from central (http://repo1.maven.org/maven2): No response received after 60000

¿Cómo fuerzo a Maven a actualizar?

M4ks
fuente
Nota al margen: tuve este problema con Atlassian Maven (desde el complemento SDK) y la actualización a una versión más nueva resolvió el problema.
Wirone

Respuestas:

1597
mvn clean install -U

-Usignifica forzar la actualización de las dependencias de la instantánea . Las dependencias de lanzamiento no se pueden actualizar de esta manera.

lwpro2
fuente
32
Estoy de acuerdo con lwpro2, esto también resolvió mi problema. Simplemente hacer mvn clean no es suficiente. La respuesta de Navi no es suficiente para resolver el problema.
R. van Twisk
1
Creo que esto es más complicado si usaba artefactos y usaba la identificación del repositorio "central", porque los metadatos aparentemente no se limpian.
ggb667
2
Esto no parece actualizar realmente los frascos de dependencia de la instantánea, solo los metadatos.
Roddy de los guisantes congelados
si es causado por el archivo .lastupdated, generado desde la última descarga de dependencia fallida, este método no funcionará, necesitamos algo como la respuesta de Rober Reiz
Junchen Liu
1
Estoy viendo la ayuda para versiones anteriores y hasta Maven 2.0.4, la descripción para el indicador -U era: "-U, - update-snapshots Actualiza todas las instantáneas independientemente de las políticas del repositorio" a partir de 2.0.5, se convirtió en: "-U, - update-snapshots Obliga a verificar actualizaciones e instantáneas actualizadas en repositorios remotos" Y ha sido así desde entonces. Ambas versiones se lanzaron en 2007. Me pregunto si la respuesta debe editarse para tener en cuenta también las versiones.
cleberz
93

Si su repositorio local está de alguna manera guardado para los tarros de lanzamiento en lugar de las instantáneas ( -Uy --update-snapshotssolo actualiza las instantáneas), puede purgar el repositorio local utilizando lo siguiente:

 mvn dependency:purge-local-repository

Probablemente quiera limpiar e instalar nuevamente:

 mvn dependency:purge-local-repository clean install

Mucha más información disponible en https://maven.apache.org/plugins/maven-dependency-plugin/examples/purging-local-repository.html

FuzzyJulz
fuente
8
Tan pronto como lo hice mvn dependency:purge-local-repository, simplemente volvió a descargar todas las dependencias nuevamente, que es exactamente lo que quería
smac89
92

-U parece forzar la actualización de todas las dependencias.

Si desea actualizar una sola dependencia sin limpieza o -Usimplemente puede eliminarla de su repositorio local y luego compilar.

El siguiente ejemplo es para actualizar slf4j-api 1.7.1-SNAPSHOT:

rm -rf ~/.m2/repository/org/slf4j/slf4j-api/1.7.1-SNAPSHOT
mvn compile
Ayush Gupta
fuente
Esto funciona muy bien si está utilizando otra herramienta que no sea Maven que hace referencia a su repositorio Maven local.
Mansoor Siddiqui
57

Todas las respuestas aquí no funcionaron para mí. Usé el método del martillo:

find ~/.m2/ -name "*.lastUpdated" | xargs rm

Eso solucionó el problema :-)

Robert Reiz
fuente
1
@ DJ2 Esto elimina todos los archivos en el .m2directorio llamado*.lastUpdated
sjngm
find ~/.m2/ -name "*.lastUpdated" -deleteharía sin el peligro de xargso rmsuperior a ciertos límites (si se encuentran muchos archivos).
Un Sz
45

Puedes hacerlo de manera efectiva Eclipse IDE. Por supuesto si lo estás usando.

Project_Name->Maven->Update Project Configuration->Force Update of Snapshots/Releases
Amit Shakya
fuente
1
Hice la versión de línea de comando en la respuesta de @ lwpro2, lo que me permitió construir en la línea de comando , pero aún así no pude construir dentro de Eclipse. Hacer esto consiguió que se construyera a través de Eclipse.
Brick
Solo funciona para mí si cierro y vuelvo a abrir Eclipse después de ejecutar la actualización.
ceklock
33

En caso de que alguien solo quiera actualizar las dependencias de la instantánea del proyecto y no quiera instalar artefactos:

mvn dependency:resolve -U

No olvides volver a importar las dependencias en tu IDE. En IDEA, debe hacer clic derecho en el archivo pom y elegir Maven -> Reimportar

GlaIZier
fuente
13

Si no está seguro de qué hay dentro de su repositorio local, le recomiendo activar una compilación con la opción

-Dmaven.repo.local=localrepo

De esa manera, se asegurará de construir en un ambiente de sala limpia.

merejy
fuente
55
este comando significa usar la carpeta localrepo para ser el repositorio local. eso está bien para un solo espacio de trabajo de proyecto, pero es malo si tiene más de un proyecto y pocos dependen del otro. entonces es mejor dar una ruta completa como -Dmaven.repo.local = / data / my / localrepoDir
tgkprog
9

En mi caso, lo primero que hice fue:

mvn clean install -U

Todavía mostraba el mismo error, luego cerré el proyecto y volví a abrirlo. Finalmente funcionó.

rajeev
fuente
Creo que podría volver a importar dependencias para evitar la reapertura del proyecto
GlaIZier
4

Si está utilizando eclipse IDE, entonces:

  • Seleccionar proyecto.
  • Presione alt + F5, aparecerá la ventana para Actualizar Proyecto Maven.

  • Marque - Forzar actualización de instantáneas / lanzamientos y haga clic en Aceptar.

Si usa Intellij IDE

  • ir a la configuración / Maven
  • marque Actualizar siempre instantáneas
patidarsnju
fuente
3

Utilicé IntelliJ IDE y tuve un problema similar y para resolver hice clic en "Generar fuentes y actualizar carpetas para todos los proyectos" en la pestaña Maven.

ingrese la descripción de la imagen aquí

Willyan
fuente
2

Tengo el error en otro contexto. Por lo tanto, mi solución podría ser útil para otros que se atiborran de la pregunta:

El problema: he copiado el repositorio local a otra computadora, que no tiene conexión a un repositorio especial. Entonces Maven trató de verificar los artefactos contra el repositorio inválido.

Mi solución: eliminar los archivos _maven.repositories.

Matthias M
fuente
2

Esta es una de las cosas más molestas de Maven. Para mí sucede lo siguiente: si agrego una dependencia solicitando más dependencias y más y más pero tengo una conexión lenta, parece que se detendrá mientras se descarga y se agota el tiempo de espera. Mientras se agota el tiempo de espera, todas las dependencias que aún no se han recuperado están marcadas con marcadores de posición en el caché .m2 y Maven no (nunca) lo recogerá a menos que elimine la entrada del marcador de posición de la caché (como se indicó).

Por lo que yo veo, Maven o, más exactamente, el complemento Eclipse Maven tiene un error con respecto a esto. Alguien debería informar esto.

Martin Kersten
fuente
2

Debe verificar su archivo settings.xml en el <maven_home>/confdirectorio.

Ashish Nariyal
fuente
1

Tengo el mismo error con la dependencia de android-maps-utils. Usar un paquete de tipo aar en la sección de dependencia resuelve mi problema. Por defecto, el tipo es jar, por lo que se puede verificar qué tipo de dependencia en el repositorio se descarga.

zhen_khokh
fuente
1

Para solucionar este problema desde Eclipse:

1) Agregue la dependencia a continuación en Maven pom.xml y guarde el archivo pom.xml.

<!-- https://mvnrepository.com/artifact/com.thoughtworks.xstream/xstream -->
<dependency>
    <groupId>com.thoughtworks.xstream</groupId>
    <artifactId>xstream</artifactId>
    <version>1.3.1</version>
</dependency>

2) Ir al proyecto >> Maven >> Actualizar proyecto

seleccione el proyecto y haga clic en Aceptar.

3) Paso opcional, si no se resuelve hasta el paso 2, haga el siguiente paso después del paso 1

Vaya al proyecto >> Maven >> Actualizar proyecto >> marque la casilla 'Forzar actualización de instantáneas / lanzamientos'

seleccione el proyecto y haga clic en Aceptar.

Tarun11
fuente
1

Las versiones anteriores de maven no forzaron la comprobación de versiones faltantes cuando se usaba -U con mvn clean install, solo las instantáneas, aunque la versión más reciente lo admite.

Para alguien que todavía tiene dificultades con la versión anterior, lo siguiente puede ser útil:

En Windows:

cd %userprofile%\.m2\repository
for /r %i in (*.lastUpdated) do del %i

En Linux:

find ~/.m2  -name "*.lastUpdated" -exec grep -q "Could not transfer" {} \; -print -exec rm {} \;

Siempre que Maven no pueda descargar dependencias por cualquier motivo (conectividad / no existe, etc.), agregará el ".error = No se pudo transferir el artefacto" en el archivo nombre-dependencia.lastUpdate de la carpeta respectiva en el directorio $ home / .m2. Eliminar estos archivos obligará a Maven a intentar recuperar las dependencias nuevamente.

ankidaemon
fuente
0

Es importante agregar que la principal diferencia de ejecutar mvn con -U y sin -U es que -Uanulará sus jarras SNAPSHOT locales con jarras SNAPSHOT remotas.

Frascos SNAPSHOT locales creados a partir de locales mvn installen los casos en que tenga otros módulos de su proyecto que generen frascos.

Johnny
fuente
0

-U se utiliza para forzar la actualización de Maven Repo. Utilizar

mvn -U clean install
Sanjeev Guglani
fuente
Esta es exactamente la misma respuesta que la respuesta aceptada. Dado 6 años antes ...
Kerwin Sneijders
@KerwinSneijders Agregué la respuesta hace 2 años en ese momento, la respuesta aceptada no proporcionó información sobre lo que -U hace aquí
Sanjeev Guglani
Por lo que puedo decir, la respuesta aceptada incluía esa información del día en que se publicó. (14 de marzo de 12). E incluso si no fuera así, esta información se publica mejor en un comentario debajo de las respuestas aceptadas, ya que no es una respuesta, sino información adicional
Kerwin Sneijders
0

Intenté todas las respuestas aquí, pero nada parecía funcionar. Reinicié mi computadora primero y luego corrí mvn clean install -U. Eso resolvió mi problema.

Gelo
fuente
0

Lo que hace Maven es que descarga todas las dependencias de su proyecto en su repositorio local (carpeta .m2). Debido a que Internet causa problemas con su repositorio local, su proyecto enfrenta problemas. No estoy seguro de si esto seguramente lo ayudará o no, pero puede intentar eliminar todos los archivos dentro de la carpeta del repositorio dentro de la carpeta .m2. Como no habría nada en el repositorio local, Maven se vería obligado a descargar las dependencias nuevamente, forzando así una actualización. En general, la carpeta .m2 se encuentra en c: usuarios: [nombre de usuario] :. m2

Ketan R
fuente
-1

Tuve este problema por una razón diferente. Fui al repositorio de Maven https://mvnrepository.com buscando la última versión de Spring Core, que en ese momento era 5.0.0.M3 / El repositorio me mostró esta entrada para mi pom.xml:

<!-- https://mvnrepository.com/artifact/org.springframework/spring-core -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-core</artifactId>
    <version>5.0.0.M3</version>
</dependency>

Como soy un tonto ingenuo, asumí que el comentario me decía que el jar está ubicado en el repositorio predeterminado.

Sin embargo, después de muchos golpes en la cabeza, vi una nota justo debajo del xml que decía "Nota: este artefacto se encuentra en el repositorio público de Alfresco ( https://artifacts.alfresco.com/nexus/content/repositories/public/ ) "

Entonces el comentario en el XML es completamente engañoso. El frasco se encuentra en otro archivo, ¡por eso Maven no pudo encontrarlo!

usuario1208639
fuente
-3

Podemos forzarnos a obtener la última actualización de la versión y el repositorio de instantáneas con el siguiente comando:

mvn --update-snapshots clean install
sopheak Seng
fuente
12
Esta es exactamente la misma respuesta que la respuesta aceptada. -U es la forma abreviada de --update-snapshots.
Roddy of the Frozen Peas
-3

Tuve el mismo error y ejecutar mvn install -Uy luego ejecutar mvn installfuncionó para mí.

rich_markle
fuente
10
Por favor, no publique las respuestas "lo que se menciona en todas las otras respuestas funcionó para mí también" .
kryger
-4

Me encontré con esto recientemente y ejecutar lo siguiente solucionó todos los problemas

mvn -fae install
Hugh Brien
fuente
55
-fae,--fail-at-end Only fail the build afterwards; allow all non-impacted builds to continueParece una forma extraña de arreglar dependencias externas no actualizadas ..
Donatello
-5

mvn clean install -Uno funciona Sin embargo mvn -U cleanseguido de mvn clean installhace.

mroman
fuente