我正在使用 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
在 javac 调用之前和之后,我一直在调用 handle.exe,我可以确认运行 ant 的 java 进程在 javac 调用期间抓取了 library.jar 的文件句柄,并且它没有放弃它。这导致我后来尝试更新 jar 失败。
为什么即使在 javac 任务完成后,ant 仍会在打开的类路径中保留对 jar 的句柄?