Я использую 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" есть jar, назовите его 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 и не отказывается от него. Это приводит к тому, что моя более поздняя попытка обновить банку не удалась.
Почему муравей должен держать дескриптор jar в пути к классам открытым даже после завершения задачи javac?