web-dev-qa-db-fra.com

Pourquoi le Mvn Clean de Maven ne fonctionne-t-il pas la première fois?

Neuf fois sur dix, lorsque je lance mvn clean sur mes projets, je rencontre une erreur de compilation. Je dois exécuter mvn clean plusieurs fois jusqu'à ce que l'erreur de construction disparaisse. Est-ce que quelqu'un d'autre en fait l'expérience? Y at-il un moyen de résoudre ce problème au sein de Maven? Si non, comment vous en sortez-vous? J'ai écrit un fichier bat qui supprime les dossiers cibles et qui fonctionne bien, mais ce n'est pas pratique lorsque vous travaillez sur plusieurs projets. J'utilise Maven 2.2.1.

[ERROR] BUILD ERROR
[INFO] ------------------------------------------------------------------------
[INFO] Failed to delete directory: C:\Documents and Settings\user\My Documents\software-developm
ent\a\b\c\application-domain\target. Reason: Unable to delete directory C:\Documen
ts and Settings\user\My Documents\software-development\a\b\c\application-domai
n\target\classes\com\a\b

[INFO] ------------------------------------------------------------------------
[INFO] For more information, run Maven with the -e switch
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 6 seconds
[INFO] Finished at: Fri Oct 23 15:22:48 EDT 2009
[INFO] Final Memory: 11M/254M
[INFO] ------------------------------------------------------------------------
36
Dan Polites

Il se peut que votre IDE ou un autre processus conserve le dossier "cible", empêchant ainsi maven de le supprimer.

36
Ken Liu

Ceci est principalement dû à Indexation Windows . Exclure les dossiers target ou .jar extension de l'indexation résoudra le problème. Ma meilleure pratique consiste à exclure .jar extension.

Pour exclure les fichiers cibles:

  1. Cliquez sur l'icône Windows/menu de démarrage
  2. Tapez indexation dans le champ de recherche et cliquez sur Options d'indexation
  3. Cliquez ensuite sur le bouton Modifier pour explorer l'indexation des répertoires.
  4. Supprimez les vérifications de Cible dossiers.

Pour exclure tous les fichiers .jar :

  1. Cliquez sur l'icône Windows/menu de démarrage
  2. Tapez indexation dans le champ de recherche et cliquez sur Options d'indexation
  3. Puis cliquez sur le bouton Avancé .
  4. Passez par Types de fichiers tab.
  5. Dans la liste, recherchez jar et décochez-la.
19
Ediz Türkoğlu

Désactiver le service de recherche de fenêtres sur Win7 a fonctionné pour moi

13
JCameron

Le problème est qu'Eclipse lit en permanence les répertoires et les artefacts de votre projet Maven et en a inévitablement un lorsque celui-ci est ouvert.

La meilleure approche consiste à exécuter maven clean à partir du plug-in Eclipse (j'utilise m2Eclipse et cela semble bien fonctionner).

Une autre approche qui fonctionne est d'exécuter mvn clean avec l'indicateur maven.clean.failOnError défini sur false. Si vous l'exécutez deux fois, cela suffit généralement pour que tout fonctionne correctement, par exemple.

mvn clean -Dmaven.clean.failOnError=false && mvn clean -Dmaven.clean.failOnError=false

Vous voudrez probablement désactiver la fonction "Construire automatiquement" d'Eclipse dans le menu du projet pendant ce temps.

11
Dean Povey

Vous rencontrez souvent ce problème sous Windows car Windows ne vous permet pas (normalement) de supprimer un fichier en cours d'utilisation. Mis à part (péniblement) l’ensemble de votre configuration Maven, votre meilleur choix est de ne pas utiliser Windows (par exemple, utiliser une machine virtuelle Linux/Solaris/n’importe laquelle).

3
Nicholas Riley

Le service d'indexation Windows, le serveur d'applications ou IDE contenant le fichier JAR est la cause première. La meilleure solution consiste à désactiver le service de recherche Windows ou à exclure les fichiers JAR de l'indexation.

Une autre option (imparfaite) mvn clean || mvn clean. Le symbole de double tuyau exécute la deuxième commande uniquement si la première échoue.

Voir Libération des verrous de partage de fichiers Windows pour plus d'informations sur la procédure de recherche et de suppression des verrous d'écriture Windows (il est conseillé d'utiliser ProcessExplorer ou Unlocker ).

2
Bartosz Bilicki

Voici mes conclusions - 

Hormis IDE en gardant le fichier jar, vous aurez parfois un processus Java qui le provoquera également. recherchez " Java.exe"/"javaw.exe" dans le gestionnaire de tâches et supprimez-le.

Cela m'a aidé à résoudre ce problème parfois.

2
Nrj

Je suppose que vous ouvrez des fichiers dans un éditeur de texte ou laissez un shell ouvert sur un répertoire de la cible. Si certains processus bloquent un fichier ou un dossier, Windows ne vous laissera pas le supprimer.

Si vous exécutez un outil tel que wholockme , vous pourrez voir quel processus verrouille le fichier. 

2
Rich Seller

Dans mon cas, il existe un processus Java qui exécute le fichier surefirebooter.jar, qui est le plug-in permettant d'effectuer le test maven JUnit . Vous pouvez donc simplement ouvrir le gestionnaire de tâches et arrêter le processus Java.

1
Kimi Chiu

J'ai eu le même problème. J'ai fermé Eclipse et ai examiné les processus en cours dans le gestionnaire de tâches. J'ai vu un fichier appelé "Java.exe" qui ne s'exécute généralement pas. Il convient de supprimer le fichier correctement et de fonctionner correctement.

1
Yep_It's_Me

Essayez de désactiver le service d'indexation Windows.

1
Andrey Tyukavkin

J'ai eu le même problème avec les versions exécutées à partir de Hudson.

En utilisant handle.exe (de Sysinternals), j'ai découvert qu'une tâche Java.exe avait un descripteur de fichier actif dans le fichier jar généré.

Si je tue cette tâche, la construction suivante réussit . Mais la construction suivante, après cette construction réussie, échoue à nouveau avec la même erreur.

Même si la tâche de construction réussit, elle ne semble pas se terminer correctement et conserve les fichiers ouverts.

Je suis un débutant avec Hudson et je n’avais pas ce problème au début ..__ Ensuite, j’ai joué avec quelques plugins et plus tard, ce problème est arrivé et était reproductible.

J'ai désactivé presque tous les plugins (ils ne gardaient que des composants essentiels comme Subversion et sonar) et maintenant le problème semble être résolu.

J'espère que ça aide un peu ...

1
Günter Zöchbauer

Si vous utilisez IntelliJ, vous pouvez passer un paramètre supplémentaire dans les paramètres de Maven Runner:

-Dmaven.clean.failOnError=false

Définissez-le ici, dans les options VM:

Maven Runner settings

Références: http://www.jetbrains.com/idea/webhelp/maven-runner.htmlhttp://maven.Apache.org/plugins/maven-clean-plugin /faq.html

1
Sam Thompson

Ce que j’ai constaté, c’est que le développement Java avec Maven sur Windows 7 est difficile lorsque le code source est sur le lecteur C. Déplacer mon code sur un autre lecteur fonctionne. Même un lecteur logique fonctionnera, le lecteur ne doit pas nécessairement être un disque dur physique différent.

0
Thomas Newman

En effet, vous bloquez le répertoire cible (ouvrez un fichier ou entrez dans le répertoire (sous) du répertoire cible, ou tout autre processus/application utilise le fichier de ce répertoire). Si la commande de suppression de Windows se plaint également, ce n'est pas la faute principale.

0
cetnar

vous devriez fermer tous les fichiers de la cible, pour moi, j'utilise M2Eclipse directement, mieux vaut également essayer mvn clean -Dmaven.clean.failOnError = false

0
romdhani

Si vous ne souhaitez pas modifier les paramètres d'indexation Windows, vous pouvez également le suspendre également.

0
Trevor