Comment forcer la mise à jour de Maven?

731

J'ai importé mon projet déjà fonctionnel sur un autre ordinateur et il a commencé à télécharger des dépendances.

Apparemment, ma connexion Internet est tombée en panne et maintenant j'obtiens ce qui suit:

    >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

Comment forcer maven à mettre à jour?

M4ks
la source
Note latérale: J'ai eu ce problème avec Atlassian Maven (du plugin SDK) et la mise à niveau vers une version plus récente a résolu le problème.
Wirone

Réponses:

1597
mvn clean install -U

-Usignifie forcer la mise à jour des dépendances de l' instantané . Les dépendances des versions ne peuvent pas être mises à jour de cette façon.

lwpro2
la source
32
Je suis d'accord avec lwpro2, cela a également résolu mon problème. Faire juste mvn clean ne suffit pas. La réponse de Navi ne suffit pas pour résoudre le problème.
R. van Twisk
1
Je pense que c'est plus compliqué si vous utilisiez artificiel et utilisiez l'ID de référentiel "central", car les métadonnées ne sont apparemment pas nettoyées.
ggb667
2
Cela ne semble pas mettre à jour les fichiers de dépendance des instantanés, juste les métadonnées.
Roddy des pois surgelés
si elle est causée par le fichier .lastupdated, généré à partir du dernier téléchargement de dépendance infructueux, cette méthode ne fonctionnera pas, nous avons besoin de quelque chose comme la réponse de Rober Reiz
Junchen Liu
1
Je regarde l'aide pour les versions précédentes et jusqu'à maven 2.0.4, la description de l'indicateur -U était: "-U, - update-snapshots Mettre à jour tous les instantanés indépendamment des politiques de référentiel" à partir de 2.0.5, il est devenu: "-U, - update-snapshots Force une vérification des versions mises à jour et des instantanés sur les référentiels distants" Et c'est comme ça depuis. Les deux versions ont été publiées en 2007. Je me demande si la réponse doit également être modifiée pour tenir compte des versions?
cleberz
93

Si votre référentiel local est en quelque sorte détruit pour les pots de publication plutôt que pour les instantanés ( -Uet --update-snapshotsuniquement les instantanés de mise à jour), vous pouvez purger le référentiel local en utilisant ce qui suit:

 mvn dependency:purge-local-repository

Vous voudrez probablement alors nettoyer et réinstaller:

 mvn dependency:purge-local-repository clean install

Beaucoup plus d'informations disponibles sur https://maven.apache.org/plugins/maven-dependency-plugin/examples/purging-local-repository.html

FuzzyJulz
la source
8
Dès que je l'ai fait mvn dependency:purge-local-repository, il a simplement téléchargé à nouveau toutes les dépendances, ce qui est exactement ce que je voulais
smac89
92

-U semble forcer la mise à jour de toutes les dépendances.

Si vous souhaitez mettre à jour une seule dépendance sans nettoyage ou -Uvous pouvez simplement la supprimer de votre référentiel local, puis la construire.

L'exemple ci-dessous si pour la mise à jour slf4j-api 1.7.1-SNAPSHOT:

rm -rf ~/.m2/repository/org/slf4j/slf4j-api/1.7.1-SNAPSHOT
mvn compile
Ayush Gupta
la source
Cela fonctionne bien si vous utilisez un autre outil que maven qui fait référence à votre référentiel maven local.
Mansoor Siddiqui
57

Toutes les réponses ici n'ont pas fonctionné pour moi. J'ai utilisé la méthode du marteau:

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

Cela a résolu le problème :-)

Robert Reiz
la source
1
@ DJ2 Ceci supprime tous les fichiers du .m2répertoire-nommé*.lastUpdated
sjngm
find ~/.m2/ -name "*.lastUpdated" -deleteferait sans danger xargsou rmdépassant certaines limites (si de nombreux fichiers sont trouvés).
Un Sz
45

Vous pouvez le faire efficacement à partir de Eclipse IDE. Bien sûr, si vous l'utilisez.

Project_Name->Maven->Update Project Configuration->Force Update of Snapshots/Releases
Amit Shakya
la source
1
J'ai fait la version en ligne de commande dans la réponse de @ lwpro2, ce qui m'a permis de construire sur la ligne de commande , mais je ne pouvais toujours pas construire dans Eclipse. Faire cela l'a permis de construire via Eclipse.
Brick
Ne fonctionne pour moi que si je ferme et rouvre Eclipse après avoir exécuté la mise à jour.
ceklock
33

Juste au cas où quelqu'un voudrait seulement mettre à jour les dépendances des instantanés du projet et ne veut pas installer d'artefact:

mvn dependency:resolve -U

N'oubliez pas de réimporter les dépendances dans votre IDE. Dans IDEA, vous devez cliquer avec le bouton droit sur le fichier pom et choisir Maven -> Réimporter

GlaIZier
la source
13

Si vous n'êtes pas sûr de ce qui se trouve à l'intérieur de votre référentiel local, je recommande de déclencher une build avec l'option:

-Dmaven.repo.local=localrepo

De cette façon, vous vous assurerez de construire dans un environnement de salle blanche.

merejy
la source
5
cette commande signifie utiliser le dossier localrepo pour être le référentiel local. c'est bien pour un seul espace de travail de projet mais mauvais si vous avez plus d'un projet, et peu dépendent de l'autre. alors vous feriez mieux de donner un chemin complet comme -Dmaven.repo.local = / data / my / localrepoDir
tgkprog
9

Dans mon cas, j'ai d'abord été:

mvn clean install -U

Il montrait toujours la même erreur, puis j'ai fermé le projet et l'ai à nouveau rouvert. Enfin travaillé.

rajeev
la source
Je pense que vous pouvez simplement réimporter les dépendances pour éviter de rouvrir le projet
GlaIZier
4

Si vous utilisez l' IDE Eclipse, alors:

  • Sélectionnez Projet.
  • Appuyez sur alt + F5, la fenêtre de mise à jour du projet Maven apparaîtra.

  • Cochez - Forcer la mise à jour des instantanés / versions et cliquez sur OK.

Si vous utilisez Intellij IDE

  • aller dans les paramètres / Maven
  • check Toujours mettre à jour les instantanés
patidarsnju
la source
3

J'ai utilisé l'IDEI IntelliJ et j'ai eu un problème similaire et pour le résoudre, j'ai cliqué dans "Générer des sources et mettre à jour les dossiers pour tous les projets" dans l'onglet Maven.

entrez la description de l'image ici

Willyan
la source
2

J'ai l'erreur dans un autre contexte. Ma solution pourrait donc être utile à ceux qui trébuchent sur la question:

Le problème: j'ai copié le référentiel local sur un autre ordinateur, qui n'a pas de connexion à un référentiel spécial. Maven a donc essayé de vérifier les artefacts par rapport au référentiel non valide.

Ma solution: supprimez les fichiers _maven.repositories.

Matthias M
la source
2

C'est l'une des choses les plus ennuyeuses à propos de Maven. Pour moi, ce qui suit se produit: Si j'ajoute une dépendance demandant de plus en plus de dépendances mais que j'ai une connexion lente, elle semble s'arrêter pendant le téléchargement et la temporisation. Bien que toutes les dépendances non encore récupérées soient marquées avec des espaces réservés dans le cache .m2 et Maven ne les récupérera (jamais) que si je supprime l'entrée d'espace réservé du cache (comme indiqué précédemment) en la supprimant.

Donc pour autant que je le vois, Maven ou plus précisément le plugin Eclipse Maven a un bug à ce sujet. Quelqu'un devrait le signaler.

Martin Kersten
la source
2

Vous devez vérifier votre fichier settings.xml dans le <maven_home>/confrépertoire.

Ashish Nariyal
la source
1

J'ai la même erreur avec la dépendance android-maps-utils. L'utilisation d'un package de type aar dans la section des dépendances résout mon problème. Par défaut, le type est jar. Il est donc possible de vérifier quel type de dépendance dans le référentiel est téléchargé.

zhen_khokh
la source
1

Pour résoudre ce problème depuis Eclipse:

1) Ajoutez la dépendance ci-dessous dans Maven pom.xml et enregistrez le fichier 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) Aller au projet >> Maven >> Mettre à jour le projet

sélectionnez le projet et cliquez sur OK.

3) Étape facultative, si elle n'est pas résolue jusqu'à l'étape 2, procédez comme suit après l'étape 1

Aller au projet >> Maven >> Mettre à jour le projet >> cocher la case 'Forcer la mise à jour des instantanés / versions'

sélectionnez le projet et cliquez sur OK.

Tarun11
la source
1

Les versions précédentes de maven ne forçaient pas la vérification des versions manquantes lors de l'utilisation de -U avec une installation propre de mvn, uniquement les instantanés, bien que la version plus récente le prenne en charge.

Pour quelqu'un qui a encore du mal avec la version précédente, ce qui suit peut être utile:

Sous Windows:

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

Sous Linux:

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

Chaque fois que maven ne peut pas télécharger les dépendances pour une raison quelconque (connectivité / n'existe pas, etc.), il ajoutera le fichier ".error = Impossible de transférer l'artefact" dans le fichier dependency-name.lastUpdate dans le dossier respectif sous le répertoire $ home / .m2. La suppression de ces fichiers forcera maven à essayer de récupérer à nouveau les dépendances.

ankidaemon
la source
0

Il est important d'ajouter que la principale différence de l'exécution mvn avec -U et sans -U est qu'elle -Uremplacera vos fichiers SNAPSHOT locaux par des fichiers SNAPSHOT distants.

Fichiers jar SNAPSHOT locaux créés à partir du local mvn installdans les cas où d'autres modules de votre projet génèrent des jars.

Johnny
la source
0

-U est utilisé pour forcer la mise à jour de maven Repo. Utilisation

mvn -U clean install
Sanjeev Guglani
la source
C'est exactement la même réponse que la réponse acceptée. Donné 6 ans plus tôt ...
Kerwin Sneijders
@KerwinSneijders J'avais ajouté une réponse il y a 2 ans à ce moment-là, la réponse acceptée n'a pas fourni d'informations sur ce que -U fait ici
Sanjeev Guglani
Autant que je sache, la réponse acceptée comprenait cette information à partir du jour où elle a été publiée. (14 mars 12). Et même si ce n'est pas le cas, cette information est mieux publiée dans un commentaire sous les réponses acceptées car ce n'est pas une réponse mais plutôt des informations supplémentaires
Kerwin Sneijders
0

J'ai essayé toutes les réponses ici mais rien ne semblait fonctionner. Redémarré mon ordinateur d'abord puis a couru mvn clean install -U. Cela a résolu mon problème.

Gelo
la source
0

Ce que maven fait, c'est qu'il télécharge toutes les dépendances de votre projet dans votre référentiel local (dossier .m2). En raison des problèmes d'Internet avec votre dépôt local, votre projet est confronté à des problèmes. Je ne sais pas si cela vous aidera sûrement ou non, mais vous pouvez essayer de supprimer tous les fichiers du dossier du référentiel dans le dossier .m2. Puisqu'il n'y aurait rien dans le dépôt local, maven serait obligé de télécharger à nouveau les dépendances, forçant ainsi une mise à jour. Généralement, le dossier .m2 se trouve dans c: utilisateurs: [nom d'utilisateur] :. m2

Ketan R
la source
-1

J'ai eu ce problème pour une raison différente. Je suis allé au référentiel maven https://mvnrepository.com à la recherche de la dernière version de Spring Core, qui était à l'époque 5.0.0.M3 / Le référentiel m'a montré cette entrée pour mon 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>

Fou naïf que je suis, j'ai supposé que le commentaire me disait que le pot est situé dans le référentiel par défaut.

Cependant, après beaucoup de coups de tête, j'ai vu une note juste en dessous du xml disant "Remarque: cet artefact est situé dans le référentiel public Alfresco ( https://artifacts.alfresco.com/nexus/content/repositories/public/ ) "

Le commentaire dans le XML est donc complètement trompeur. Le pot est situé dans une autre archive, c'est pourquoi Maven n'a pas pu le trouver!

user1208639
la source
-3

Nous pouvons forcer pour obtenir la dernière mise à jour du référentiel de versions et d'instantanés avec la commande ci-dessous:

mvn --update-snapshots clean install
sopheak Seng
la source
12
C'est exactement la même réponse que la réponse acceptée. -U est la forme abrégée de --update-snapshots.
Roddy des Frozen Peas
-3

J'ai eu la même erreur et courir mvn install -Uet courir a mvn installfonctionné pour moi.

rich_markle
la source
10
Veuillez ne pas poster "la chose mentionnée dans toutes les autres réponses a fonctionné pour moi aussi" .
kryger du
-4

Je suis tombé sur cela récemment et l'exécution de ce qui suit a résolu tous les problèmes

mvn -fae install
Hugh Brien
la source
5
-fae,--fail-at-end Only fail the build afterwards; allow all non-impacted builds to continueCela semble une étrange façon de corriger les dépendances externes non mises à jour ..
Donatello
-5

mvn clean install -Une fonctionne pas. Cependant mvn -U cleansuivi par le mvn clean installfait.

mroman
la source