Ant删除第一个工作,然后没有

时间:2012-04-10 14:09:08

标签: ant delete-file

我正在开发一个大型Ant脚本(> 1000行),这是我从别人那里继承的(不再可用)。 我遇到Ant没有删除目录的问题。它在脚本中的某一点起作用,在另一点上它不起作用:Ant不会给出错误消息,但它也会使目录离开它们。

我在它周围放了一些groovy,检查是否存在目录:

  <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>

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

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

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

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

1 个答案:

答案 0 :(得分:4)

你正在使用dirset。使用文件集。

说明: dirset不是您认为的那样。你几乎总是想使用文件集。

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

在这样的假想树中:

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

... dirset集合将选择top /,top / sub1 /和top / sub2 /,但 top / sub1 / file.txt。 <delete>对集合起作用,删除非空目录。所以在上面的例子中,它将删除top / sub2(它是空的)但不删除top / sub1或top /。这也应该为您解释<move>尝试的结果,它可以让您了解dirset实际上可以使用的案例。

fileset包括文件和目录。