I'm using ant 1.8.0 and java 1.6.0.17 and I'm running into a strange problem.
In my build.xml, I have a simple task that compiles the code
<javac destdir="${dir.build.classes}" debug="on">
<classpath refid="classpath"/>
<src path="${dir.src.java}"/>
</javac>
In the "classpath" is a jar, call it library.jar
In a later task, I need to add a few classes to library.jar
, which I do like this
<jar destfile="library.jar" update="true" duplicate="fail">
<fileset dir="${dir.build.classes}">
<include name="some/class/files"/>
</fileset>
</jar>
This will fail with the error
Unable to rename old file (library.jar) to temporary file
I stuck in a call to handle.exe before and after the javac call, and I can confirm that the java process running ant grabs a file handle to library.jar during the javac call, and it doesn't give it up. This causes my later attempt to update the jar to fail.
Why would ant keep a handle to the jar in a classpath open even after the javac task is complete?