Ant无法在Windows上删除某些文件。

23

我有一个Ant构建文件,用于创建目录、调用javac和其他常规操作。我的问题是,在尝试清除(删除所有已生成的内容)时,删除任务报告无法删除某些文件。但是当我手动尝试删除这些文件时,它完全有效。这些文件显然没有被任何其他进程占用,但Ant仍然无法将它们删除。我该怎么办?


你正在使用哪个版本的Ant? - Sergey
1
当Ant尝试从先前的任务中删除它们时,它们仍然可以保持打开状态。 - Thorbjørn Ravn Andersen
15个回答

15

我曾经遇到过这个问题。 这是因为我尝试删除的文件是另一个任务的类路径的一部分。


2
@StefanSprenger 你必须按正确的顺序执行你的任务。 - CMS
2
这个问题并不总是有一个确定的原因。有时候你只需要重启系统,一切就能正常工作了。在这种情况下,很可能是Windows错误地认为某个进程正在使用这些文件。 - Arashsoft
@ShimiBandiel,谢谢,看起来很合理。我试着手动移动文件,但是Windows 10告诉我它正在被Eclipse使用。我关闭了Eclipse,移动了文件,然后继续我的ant构建。让我烦恼的是我需要将该文件添加到类路径中... - jumping_monkey

9

这取决于...

  • Ant进程没有足够的权限删除文件(通常是因为它们是由不同的用户创建的,可能是系统用户)。尝试以管理员身份运行您的Ant脚本,使用“以其他用户身份运行”。
  • Windows在进程死亡或被终止时清除文件锁定非常糟糕;因此,Windows认为该文件被一个已经死亡(或被终止)的进程锁定。在这种情况下,您无法做任何事情,只能重新启动计算机。
  • 获取更好的工具来检查您的系统状态。我建议下载SysInternals工具并使用它们代替默认的Windows工具。

我同意第三点。Sysinternals的handle.exe是一种非常有价值的命令行工具,可以分析这类问题。 - Richard A
好的,那么Sysinternals向我展示了javaw.exe对文件或目录的句柄,现在该怎么办? - Snekse

5

使用Ant Retry任务对我很有帮助。我刚刚将其包装在删除任务周围。


3

我遇到了同样的问题。
我的电脑上没有任何classpath或杀毒软件。
然而,我使用的ANT版本是32位的,而我安装的JDK却是64位的。
我安装了一个32位的JDK,问题得到了解决。


和我一样的问题...更换为32位jdk后就可以了...谢谢兄弟。 - Anu Shibin Joseph Raj

3

您没有说明您的构建是否以当前登录用户身份运行。如果不是,则 explorer.exe 或其他进程具有所显示的目录可能会导致它被锁定。但在同一 explorer.exe 进程中删除它将成功。尝试使用Unlocker查看哪些进程锁定了文件/目录。


3

Ant进程中是否有某些文件(或目录)处于打开状态?这可能导致在运行Ant后您可以删除它们,但在运行期间无法删除。


2

1
在我的情况下,我在Eclipse中进行ant清理时失败了,无法删除构建文件。我时不时会遇到这种情况。通常在重试后会成功。但这次没有成功。尝试从命令行运行ant clean,但失败了,显示“无法删除”。很可能是Eclipse占用了问题文件,当我退出Eclipse后,命令行就可以顺利删除了。

0

你需要在Windows中手动删除它。这对我有用。(通常要删除的文件是旧版本的jar文件。例如:如果存在httpcore.4.2.5.ja5r和httpcore.4.3.jar,则会尝试删除4.2.5.jar)


0

我遇到了这个问题,因为蚂蚁试图删除的文件正在被其他服务/进程使用。 我停止了该服务,然后蚂蚁构建脚本成功运行。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接