Récemment, Apache Maven semble avoir des problèmes de mise en cache. Effectuer des installations propres sur nos projets à l'aide de Windows Vista ou Windows 7 produit parfois des artefacts avec les mêmes données qu'une génération précédente même si les fichiers de l'artefact plus récents auraient dû être mis à jour.
Existe-t-il un moyen de vider ce cache pour forcer maven à toujours déclencher une génération propre de l'artefact local qui doit être construit?
En particulier, nous rencontrons des problèmes pour créer une application Web avec le plugin War. La version Maven est 3.0.3. La version du plugin War est 2.1.1.
-U
drapeau qui mettra à jour les artefacts?mvn clean install
mettre les nouveaux artefacts dans le référentiel local?mvn clean install -Dmaven.repo.local=/alternate/repo/location
Réponses:
Supprimez les artefacts (ou le référentiel local complet) à la
c:\Users\<username>\.m2\repository
main.la source
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
finalement fonctionnéPour nettoyer le cache local, essayez d'utiliser le plug-in de dépendance.
mvn dependency:purge-local-repository
: Il s'agit d'une tentative de suppression des fichiers du référentiel local, mais cela va toujours et remplit le référentiel local une fois les éléments supprimés.mvn dependency:purge-local-repository -DreResolve=false
: Cela évite la re-résolution des dépendances mais semble aller parfois au réseau.mvn dependency:purge-local-repository -DactTransitively=false -DreResolve=false
: Ceci a été ajouté par Paweł Prażak et semble bien fonctionner. J'utiliserais le troisième si vous voulez que le dépôt local soit vidé, et le premier si vous voulez simplement jeter le dépôt local et récupérer à nouveau les dépendances.la source
<User_Name>/.m2
emplacement. Je ne sais pas si ce serait la raison.Avez-vous vérifié / modifié les paramètres updatePolicy pour vos référentiels dans votre
settings.xml
.Essayez de le régler sur
always
.la source
<updatePolicy>
dans mon pom.xml, mais il y a<snapshotPolicy>
Je ferais ce qui suit:
Les drapeaux indiquent à maven de ne pas essayer de résoudre les dépendances ou de frapper le réseau. Supprimez ce que vous voyez localement.
Et pour faire bonne mesure, ignorez les erreurs (
--fail-at-end
) jusqu'à la fin. Cela est parfois utile pour les projets qui ont un ensemble de dépendances quelque peu foiré ou qui s'appuient sur un référentiel interne quelque peu foiré (cela arrive).la source
Cela fonctionne sur Spring Tool Suite v 3.1.0.RELEASE, mais je suppose qu'il est également disponible sur Eclipse.
Après avoir supprimé les artefacts à la main (comme indiqué par palacsint ci-dessus) dans le
/username/.m2
répertoire, ré-indexez les fichiers en procédant comme suit:Aller à:
Windows->Preferences->Maven->User Settings
menu.Cliquez sur le
Reindex
bouton à côté de la zone deLocal Repository
texte. Cliquez sur "Appliquer" puis "OK" et vous avez terminé.la source
Comme certaines réponses l'ont souligné, parfois vous voulez vraiment supprimer complètement le référentiel local, par exemple, il peut y avoir des artefacts qui ne peuvent pas être purgés car ils ne sont plus référencés par le pom.
Si vous souhaitez que cette suppression soit intégrée dans une phase maven, comme par exemple,
clean
vous pouvez utiliser lemaven-clean-plugin
et accéder au référentiel via les paramètres, par exemple:la source
Utilisez
mvn dependency:purge-local-repository -DactTransitively=false -Dskip=true
si vous avez des plugins maven comme l'un des modules. Sinon, Maven essaiera de les recompiler, téléchargeant ainsi à nouveau les dépendances.la source
J'ai eu ce même problème, et j'ai écrit une doublure en coque pour le faire.
Je l'ai fait en une seule ligne parce que je voulais avoir un projet Jenkins pour simplement l'exécuter à tout moment, donc je n'aurais pas à me connecter à des trucs, etc. Si vous vous permettez un script shell pour cela, vous pouvez l'écrire plus propre:
Devrait fonctionner, mais je n'ai pas testé tout ce script. (J'ai testé la première commande, mais pas le script entier.) Cette approche a l'inconvénient d'exécuter d'abord une grande commande compliquée. Il est idempotent, vous pouvez donc le tester par vous-même. La suppression est sa propre commande par la suite, et cela vous permet de tout essayer et de vérifier qu'elle fait ce que vous pensez qu'elle fait, car vous ne devez pas faire confiance aux commandes de suppression sans vérification. Cependant, il est intelligent pour une bonne raison: il est portable. Il respecte votre fichier settings.xml. Si vous exécutez cette commande et dites à maven d'utiliser un fichier xml spécifique (l'argument -s ou --settings), cela fonctionnera toujours. Vous n'avez donc pas besoin de jouer pour vous assurer que tout est le même partout.
C'est un peu maniable, mais c'est une façon décente de faire des affaires, OMI.
la source
Il y a donc quelques commandes que vous pouvez utiliser pour le nettoyage
la suppression du dossier du référentiel de .m2 peut également vous aider.
la source