无论如何,我如何让Apache Ant删除目录。我希望它被删除,即使Windows上有目录的锁或用法。
我在Windows机器上使用持续集成远程代理,无法删除构建目录,因此构建失败。这非常令人讨厌并且对统计数据造成破坏。
没有任何主动使用该目录,并且禁用了防病毒软件。
我只想删除目录,无论如何。如何在Windows上使用Apache Ant实现这一目标?
答案 0 :(得分:1)
我认为您需要外部程序才能执行此操作。 检查一下: _http://www.codeguru.com/cpp/w-p/files/fileio/article.php/c1287
这里你有解锁工具的比较。用命令行界面检查: _http://ccollomb.free.fr/unlocker/
如果你知道什么进程拿着你的文件夹,你可以调用taskkill ...(你甚至可以杀死explorer.exe但是你可以再次启动它) 如果您的文件夹已共享,则可以使用 net delete 命令
答案 1 :(得分:0)
在Ant中,最好的方法是设置参数quiet="true"
和includeemptydirs="true"
,以防止在缺少目录或存在锁定时停止构建,并删除顶层目录,即使它为空。例如:
<delete quiet="true" includeEmptyDirs="true">
<fileset dir="stubbornDir"/>
</delete>
您还可以确保尝试删除的资源不是只读的,因此在执行<delete>
任务之前,请在脚本中包含以下内容:
<!-- The following only works on UNIX -->
<chmod perm="a+w">
<fileset dir="${dist.dir}">
<include name="**/*.jar"/>
<exclude name="${app.context.path}"/>
</fileset>
</chmod>
<!-- Win NT alternative -->
<echo message=" To permit file deletion, execute attrib.exe to change read permissions on: ${dist.dir}"/>
<exec dir="${dist.dir}" executable="attrib.exe" os="Windows NT,Windows 2000,Windows XP">
<arg line="-R **/*.jar"/>
</exec>
但是,为了回答您的问题,恐怕使用Ant不可能在存在锁的情况下删除文件或目录。
但是,还要知道,如果您在脚本的前面使用了<javac>
任务,那么除非您设置了fork="true"
,否则该任务将锁定类路径中的所有文件,并在执行过程中将其锁定整个构建。
希望这会有所帮助!