蚂蚁删除首先有效,然后不工作



我正在处理一个大的 Ant 脚本(> 1000 行),这是我从其他人那里继承的(不再可用)。我在 Ant 不删除目录时遇到问题。在脚本中的某一点,它有效,在另一点,它不起作用:Ant 不会给出错误消息,但它也会将目录留在它们所在的位置。

我在它周围放了一些时髦的东西,以检查目录是否存在:

  <groovy>
    println("Directories in @{outFolder} are:")
    new File("@{outFolder}").eachDir() { dir -> println dir.getName() }
  </groovy>
  <delete verbose="true" includeEmptyDirs="true" >
    <dirset dir="@{outFolder}" includes="**/*" />
  </delete>
  <echo>End of delete</echo>
  <groovy>
    println("Directories in @{outFolder} are:")
    new File("@{outFolder}").eachDir() { dir -> println dir.getName() }
  </groovy>

因此,这些行被调用并且它们起作用。接下来,调用其他一些应用程序,以创建新目录。再次调用完全相同的行(复制和粘贴,是的,它们是相等的),但现在目录不会被删除。另外:没有错误,蚂蚁继续运行。我在 Windows Server 2008 R2 上使用 Ant 1.8.1。我尝试添加睡眠,以防止锁定问题。创建目录的应用程序是Java应用程序(Tibco appManage)。这些目录包含 XML 文件,没有 jar 文件。我检查了ANT_HOME和类路径:那里没有问题。我错过了什么?

对于聪明的驴子:当然,第二次删除不应该删除应用程序创建的所有内容,但为了确定问题,我使脚本行尽可能简单。

更多信息:由于我无法使删除工作,因此我尝试使用Ant move作为解决方法。这就是我所看到的:移动在目标处创建空目录,不会从源中删除任何文件或目录,也不会报告错误。这些源目录/文件似乎有问题(我之前尝试删除过)。

另一个尝试:下载最新版本的Ant和Groovy。相同的结果。

您使用的是目录。 使用文件集。

解释:目录不是你想象的那样。 您几乎总是希望使用文件集。

第一次,它正在工作,因为目录是空的。第二次,他们不是。我可以说这是因为<dirset>包含目录对象本身,但没有其中的任何文件,并且您在删除任务中使用"includeEmptyDirs",这对于目录集毫无意义。

在这样的假设树中:

top/
  sub1/
    file.txt
  sub2/ (empty)

。目录集合将选择 top/、top/sub1/和 top/sub2/,但不会选择 top/sub1/file.txt。 <delete>作用于集合,不会删除非空目录。 因此,在上述情况下,它将删除top/sub2(为空),但不会删除top/sub1或top/。 这也应该为您解释<move>尝试的结果,这可以让您了解 dirset 实际上有用的情况。

文件

集包括文件和目录。

相关内容

  • 没有找到相关文章

最新更新