Java Ant无法删除windows上的某些文件

Java Ant无法删除windows上的某些文件,java,windows,ant,build-automation,Java,Windows,Ant,Build Automation,我有一个ant构建,可以生成目录、调用javac和所有常规的东西。我遇到的问题是,当我尝试进行清理(删除生成的所有内容)时,删除任务报告无法删除某些文件。当我尝试手动删除它们时,效果很好。这些文件显然没有被任何其他进程打开,但ant仍然无法删除它们。我能做什么?您不能说您的构建是否以当前登录用户的身份运行。如果没有,explorer.exe或其他进程显示的目录也会导致它被锁定。但是在同一个explorer.exe进程中删除它会成功。尝试从中解除锁定以查看哪些进程锁定了文件/目录。Ant进程中有什

我有一个ant构建,可以生成目录、调用javac和所有常规的东西。我遇到的问题是,当我尝试进行清理(删除生成的所有内容)时,删除任务报告无法删除某些文件。当我尝试手动删除它们时,效果很好。这些文件显然没有被任何其他进程打开,但ant仍然无法删除它们。我能做什么?

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

Ant进程中有什么东西使文件(或目录)保持打开状态吗?这将导致这样的情况,即您可以在运行ant之后删除它们,但不能在运行过程中删除它们

这取决于

  • Ant进程没有足够的权限删除这些文件(通常是因为它们是由不同的用户创建的,可能是系统用户)。尝试以管理用户身份运行Ant脚本,使用Run as
  • 当进程死亡或被终止时,Windows在清除文件锁方面非常糟糕;因此,Windows认为该文件被已终止(或已终止)的进程锁定。在这种情况下,除了重新启动之外,你什么也做不了
  • 获取更好的工具来检查系统状态。我建议下载这些工具并使用它们,而不是默认的Windows等效工具

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

      1.8.0之前的Ant版本有一个错误,导致删除操作中出现随机错误。尝试使用Ant1.8.0或更新版本


      您可以在此处查看bug详细信息,使用Ant重试任务对我有所帮助。
      我刚刚结束了删除任务。

      我最近经常遇到这个问题,它是随机的。前一次有效,下一次无效。我正在使用NetBeans(以防万一),并为build.xml添加了许多额外任务。我在-post-jar任务中遇到了这个问题。当我对文件调用unjar,然后删除时,就会发生这种情况。我怀疑NB正在尝试扫描jar,这会导致它被锁定


      对我来说,有效的方法是在-post-jar的开头立即重命名jar,并向其添加.tmp扩展名。然后我调用unjar处理临时文件。完成后,我重新命名为所需的jar名称。

      我也有同样的问题,并尝试手动删除构建目录。最后,我将项目的.jar工件重命名为与项目名称本身不同的名称,从而解决了这个问题。例如:我的项目是portal,我的ant构建的脚本用于生成portal.jar,其中eclipseant无法删除这个portal.jar。当我将build.xml更改为将.jar生成为portalnew.jar时,eclipse下次能够删除这个portalnew.jar。希望这能有所帮助。

      我也遇到了同样的问题。
      我的计算机上没有设置任何类路径或运行任何防病毒程序。
      然而,我使用的ANT版本是32位的,而我安装的JDK是64位的。

      我安装了一个32位JDK,问题得到了解决。

      在我的例子中,我的ant clean在Eclipse中失败,无法删除构建文件。我时常看到这一点。通常在重复尝试时成功。这次没有。 尝试从命令行运行ant clean,未能删除“无法删除”。
      一定是Eclipse保留了问题文件,当我退出Eclipse时,cmd行可以删除OK。

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

      我面临这个问题,因为ant试图删除的文件正被其他服务/进程使用。
      我停止了服务,然后ant构建脚本运行了。

      在我的例子中,我停止了从任务管理器运行Java进程,并重新运行ant构建文件。该文件能够删除,并且生成成功。

      自从切换到Microsoft Windows 10以来,我经常看到这样的问题。在删除文件之前立即重命名该文件为我解决了以下问题:

      <rename src="file.name" dest="file.name.old"/>
      <delete file="file.name.old" />
      
      
      
      我同意第3点。sysinternals handle.exe作为分析此类问题的命令行工具非常有用。好的,sysinternals告诉我javaw.exe在文件或目录上有一个句柄,现在怎么办?您使用的是什么Ant版本?当Ant试图从以前的版本中删除它们时,它们仍然可以打开task@StefanSprenger您必须以正确的顺序执行任务。这并不总是导致此问题的原因。有时你只需要重新启动你的系统,一切正常。在这种情况下,原因可能是windows错误地认为某个进程正在使用这些文件。@ShimiBandiel,谢谢,似乎合乎逻辑。我试图手动移动该文件,而
      windows10
      告诉我Eclipse正在使用它。我关闭Eclipse,移动文件,然后继续我的ant构建。让我恼火的是我需要类路径上的那个文件…我也有同样的问题。。。更改为32位jdk后工作。。。谢谢兄弟