J'utilise Ant 1.8.0 et Java 1.6.0.17 et je suis en train de courir dans un problème étrange.
dans mon build.xml, j'ai une tâche simple qui compile le code p>
<jar destfile="library.jar" update="true" duplicate="fail"> <fileset dir="${dir.build.classes}"> <include name="some/class/files"/> </fileset> </jar>
5 Réponses :
Ceci est un problème de verrouillage de Windows. Tout processus / thread lisant le fichier l'empêchera d'être renommée, ce qui est la tâche ZIP, lors de la mise à jour d'un fichier JAR existant. P>
Je suppose que la poignée de fichier est maintenue ouverte car votre utilisation d'une référence de classe de classe. Peut-être que les poignées de fichier pourraient être fermées si vous deviez explicitement définir la classe de classe de la tâche Javac? p>
Pouvez-vous expliquer ce que vous entendez par "définir explicitement la classe de la tâche Javac"? C'est un ensemble assez grand de pots qui est utilisé dans plusieurs autres endroits, ce qui n'est donc pas vraiment une option, et je ne sais pas pourquoi cela ferait une différence.
J'ai donc trouvé la réponse, après une certaine expérimentation. En ajoutant C'est malheureux cependant, car je dois m'empêcher d'ajouter ceci à chaque tâche Javac en amont. P> Fork = "true" code> à My
Javac code>, la poignée du fichier est fermée à la fin de la tâche. Cela permet à ma modification de JAR de réussir plus tard dans la construction. P>
Il semble lié à la configuration de CLASSPATH et la première opération sur le fichier JAR le garde ouverte. J'ai résolu ce problème en supprimant "". de ma variables de classePath env. P>
Il y a un bug déposé pour le même problème ici . p>
Ils disent que cela est fixé dans la version ant 1.8 p>
J'ai essayé la dernière version de Ant (1.10.7) et ses œuvres pour moi. P>
Ce problème a été résolu dans 1.9.7 P>