ant错误无法将旧文件重命名为临时文件

标签 ant jar javac filehandle

我正在使用 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>

在“类路径”中有一个 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 的句柄?

最佳答案

所以我找到了答案,经过一些实验。通过添加 fork="true"到我的 javac任务,文件句柄在任务结束时关闭。这允许我的 jar 修改在构建的后期成功。

不过很不幸,因为我必须记住将其添加到每个上游 javac 任务中。

关于ant错误无法将旧文件重命名为临时文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2300473/

相关文章:

java - 更新JRE后双击jar文件不会执行

Javac 找不到类路径中引用的包

java - 仍然无法在 Windows 7 中修复 "error: package javax.servlet.http does not exist"

jakarta-ee - Maven 3 :How to copy a file to test directory , 当文件不存在时

java - 运行 Ant 的 jar 任务时如何挑选包?

java - Ant 类路径和 junit.jar

java - Maven - 从 JAR 文件加载资源?

java - 调用 jar 文件时出现意外的 java.lang.IllegalArgumentException

Java 编译器意外 "incompatible types"错误

eclipse - 将复杂的 Ant 脚本转换为一组 Eclipse 项目的合理方法是什么?