gpt4 book ai didi

Ant删除首先起作用,然后不起作用

转载 作者:行者123 更新时间:2023-12-02 09:19:23 24 4
gpt4 key购买 nike

我正在编写一个大型 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>

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

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

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

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

最佳答案

您正在使用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包括文件和目录。

关于Ant删除首先起作用,然后不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10090380/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com