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] ------------------------------------------------------------------------
Il se peut que votre IDE ou un autre processus conserve le dossier "cible", empêchant ainsi maven de le supprimer.
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:
Pour exclure tous les fichiers .jar :
Désactiver le service de recherche de fenêtres sur Win7 a fonctionné pour moi
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.
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).
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 ).
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.
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.
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.
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.
Essayez de désactiver le service d'indexation Windows.
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 ...
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:
Références: http://www.jetbrains.com/idea/webhelp/maven-runner.htmlhttp://maven.Apache.org/plugins/maven-clean-plugin /faq.html
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.
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.
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
Si vous ne souhaitez pas modifier les paramètres d'indexation Windows, vous pouvez également le suspendre également.