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

问题描述 投票:7回答:5

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

在“类路径”中是一个罐子,称它为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的句柄?

我正在使用ant 1.8.0和Java 1.6.0.17,并且遇到了一个奇怪的问题。在我的build.xml中,我有一个简单的任务,可以编译代码...

ant jar javac filehandle
5个回答
5
投票

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


3
投票

这是Windows锁定问题。在更新现有的jar文件时,任何读取该文件的进程/线程都将阻止其重命名,这是zip任务正在执行的操作。


1
投票

存在与完全相同的问题here的错误。


0
投票

我尝试过最新版本的ANT(1.10.7)及其对我的工作。


-1
投票

似乎与类路径配置有关,并且对jar文件的第一个操作使它保持打开状态。我已通过删除“”解决了此问题。来自我的classpath env变量。

© www.soinside.com 2019 - 2024. All rights reserved.