2008-09-16 7 views
14

J'ai une construction ant qui crée des répertoires, appelle javac et tous les trucs habituels. Le problème que je rencontre est que lorsque j'essaie de faire un nettoyage (supprimer tous les éléments qui ont été générés), les rapports de tâches de suppression qui était incapable de supprimer certains fichiers. Lorsque j'essaie de les supprimer manuellement, cela fonctionne très bien. Les fichiers ne sont apparemment ouverts par aucun autre processus mais Ant ne parvient toujours pas à les supprimer. Que puis-je faire?Ant n'est pas en mesure de supprimer certains fichiers sur les fenêtres

+0

Quelle version Ant utilisez-vous? – Sergey

+1

Ils peuvent toujours être ouverts lorsque la fourmi tente de les retirer d'une tâche précédente –

Répondre

12

J'ai rencontré ce problème une fois. C'était parce que le fichier que j'ai essayé de supprimer faisait partie d'un classpath pour une autre tâche.

+3

comment l'avez-vous résolu alors? –

+2

@StefanSprenger vous devez exécuter vos tâches dans le bon ordre – CMS

+2

Ce n'est pas toujours la raison de ce problème. Parfois, il suffit de redémarrer votre système et tout fonctionne bien. Dans ce cas, la raison en est probablement que Windows pense faussement qu'un processus utilise ces fichiers. – Arashsoft

2

Vous ne dites pas si votre build est exécuté en tant qu'utilisateur actuellement connecté. Si ce n'est pas le cas, le fait que explorer.exe ou un autre processus ait le répertoire affiché peut également le verrouiller. Mais la supprimer dans ce même processus explorer.exe réussirait. Essayez Unlocker de http://ccollomb.free.fr/unlocker/ pour voir quels processus ont les fichiers/répertoires verrouillés.

1

Y a-t-il quelque chose du processus Ant qui maintient les fichiers (ou le répertoire) ouverts? Cela entraînerait la situation où vous pourriez les supprimer après l'exécution de la fourmi, mais pas pendant.

8

Cela dépend ...

  • Le processus Ant ne dispose pas de suffisamment d'autorisations pour supprimer les fichiers (généralement parce qu'ils ont été créés par un autre utilisateur, peut-être un utilisateur du système). Essayez d'exécuter votre script Ant en tant qu'utilisateur administratif, en utilisant Exécuter en tant que.
  • Windows est vraiment mauvais pour nettoyer les verrous de fichiers lorsque les processus meurent ou sont tués; par conséquent, Windows pense que le fichier est verrouillé par un processus qui est mort (ou a été tué). Il n'y a rien que vous pouvez faire dans cette situation autre que le redémarrage.
  • Obtenez de meilleurs outils pour inspecter l'état de votre système. Je vous recommande de télécharger les outils SysInternals et de les utiliser à la place des équivalents Windows par défaut.
+0

Je suis d'accord avec le point 3. sysinternals handle.exe est un outil de ligne de commande inestimable pour analyser ce genre de problème. –

+0

Ok, donc sysinternals me montre que javaw.exe a un handle sur un fichier ou un répertoire, maintenant quoi? – Snekse

+0

Redémarrer le système a résolu mon problème – Arashsoft

3

Utiliser tâche Ant Retry m'a aidé. Je viens de l'enrouler autour de la tâche Supprimer.

0

J'ai souvent eu ce problème et c'est aléatoire. Une fois ça marche, la prochaine fois ça ne marche pas. J'utilise NetBeans (au cas où cela est important) et j'ai ajouté beaucoup de tâches supplémentaires à build.xml. J'avais ce problème dans la tâche post-pot. Cela arriverait quand j'appellerais unjar sur le fichier, puis supprimerais. Je soupçonne que NB essaye de balayer le pot et que cela cause le blocage.

Ce qui a fonctionné pour moi est de renommer immédiatement le pot au début de -post-jar et d'y ajouter une extension .tmp. Ensuite, j'appelle unjar sur le fichier temporaire. Quand j'ai fini, je renomme le nom du jar désiré.

0

J'ai aussi eu le même problème et j'ai essayé de supprimer manuellement les répertoires de construction. Finalement, je l'ai résolu en renommant l'artefact .jar de mon projet à un nom différent du nom du projet lui-même. Par exemple: mon projet était portal et mon script ant build a été utilisé pour générer portal.jar, où eclipse ant n'a pas pu supprimer ce portal.jar. Quand j'ai changé mon build.xml pour générer mon .jar sous portalnew.jar, eclipse a été capable de supprimer ce portalnew.jar la prochaine fois. J'espère que cela t'aides.

2

J'ai fait face au même problème.
Je n'avais pas défini de classpath ou d'antivirus sur ma machine.
Cependant, la version ANT que j'utilisais était de 32 bits et le JDK que j'avais installé était de 64 bits.
J'ai installé un JDK 32 bits et le problème a été résolu.

+0

même problème pour moi ... travaillé après avoir changé en jdk 32 bits ... merci mon frère –

0

Dans mon cas, mon nettoyage a échoué à partir d'Eclipse, incapable de supprimer les fichiers de construction. Je le vois de temps en temps. Habituellement, il réussit une nouvelle tentative. Cette fois-ci non. Essayé en cours d'exécution Ant Clean à partir de la ligne de commande, échoué Impossible de supprimer "impossible à supprimer". Eclipse devait contenir le fichier de problème. Lorsque j'ai quitté Eclipse, la ligne cmd a pu supprimer OK.

0

Vous devez le supprimer manuellement dans Windows. Cela a fonctionné pour moi. (Habituellement, les fichiers à supprimer sont des versions plus anciennes de jar .. Par exemple: s'il existe httpcore.4.2.5.ja5r et httpcore.4.3.jar, il va essayer de supprimer 4.2.5.jar)

0

i fait face à ce problème car le fichier que la fourmi essayait de supprimer était utilisé par un autre service/processus. J'ai arrêté le service, puis le script de construction de fourmi s'est déroulé.

0

Dans mon cas, j'ai arrêté d'exécuter le processus Java à partir du Gestionnaire des tâches et de réexécuter le fichier de construction Ant. Le fichier a pu être supprimé et le build a réussi.

Questions connexes