Я использую ant 1.8.0 и java 1.6.0.17 и сталкиваюсь со странной проблемой.
В моем build.xml у меня есть простая задача, которая компилирует код
<javac destdir="${dir.build.classes}" debug="on">
<classpath refid="classpath"/>
<src path="${dir.src.java}"/>
</javac>
В "classpath" есть банка, назовите ее library.jar
В более поздней задаче мне нужно добавить несколько классов к library.jar
, что я делаю вот так
<jar destfile="library.jar" update="true" duplicate="fail">
<fileset dir="${dir.build.classes}">
<include name="some/class/files"/>
</fileset>
</jar>
Это не удастся с ошибкой
Unable to rename old file (library.jar) to temporary file
Я застрял в вызове handle.exe до и после вызова javac, и я могу подтвердить, что процесс java, выполняющийся ant, захватывает дескриптор файла в library.jar во время вызова javac, и он не прекращает его , Это приводит к тому, что моя более поздняя попытка обновить банку не удалась.
Зачем муравью держать указатель на банку в открытом пути к классу даже после завершения задачи javac?