如何使用ANT在删除目录之前检查目录是否存在?

时间:2011-06-13 19:01:43

标签: ant build

使用ANT,如何在尝试删除目录之前确保该目录存在?

作为我当前清洁任务的一部分,我

<target name="clean" description="clean">
    <delete dir="${build}" />
    <delete dir="${bin}" />
    <delete dir="${dist}/myrunner.${version}.jar" />
    <delete dir="${doc}" />
    <delete dir="${report}" />
</target>

这很有效,但是(很明显)当有东西要删除时会发生删除。

使用ANT,如何检查目录是否存在?

7 个答案:

答案 0 :(得分:37)

对于这个具体案例,我不打算回答“如何查找目录是否存在”的问题,因为已经有人回答了这个问题,但我只想指出,在你干净的任务中你可以使用failonerror="false"以防止ant任务退出。这应该适合干净的任务,因为如果没有什么可以清理,那应该不是问题。

    <target name="clean" description="clean">
        <delete dir="${build}" failonerror="false"/>
        ....
        <delete dir="${report}" failonerror="false"/>
    </target>

如果您不想安装ant-contrib或由于某种原因而无法安装,那么这很有用。

答案 1 :(得分:15)

与香草蚂蚁你会使用类似=

的东西
 <target name="check">
  <condition property="deldir">
    <available file="${somedir}" type="dir"/>
  </condition>
 </target>

 <target name="deldir" depends="check" if="deldir">
 <delete dir="${somedir}"/>
    <!-- .. -->
 </target>

否则请参阅= Ant check existence for a set of files
对于类似的问题

答案 2 :(得分:13)

下面的清洁解决方案: 使用ant-contribs.jar

使用此解决方案时,请务必将以下行放在最上面

<!-- For <if> statements -->
<taskdef resource="net/sf/antcontrib/antlib.xml" />

<!-- Remove distribution directories and their content for a clean build --> <target name="clean" description="clean"> <if> <available file="${build}" type="dir" /> <then> <delete dir="${build}" /> </then> </if> </target>

答案 3 :(得分:3)

查看可用的任务。

这是一个类似的问题。

Do I have a way to check the existence of a directory in Ant (not a file)?

答案 4 :(得分:1)

以下是答案:

    <target name="delete.target.directory">  
        <delete includeemptydirs="true" verbose="false" if="${(directory::exists(directory))}">
            <fileset basedir="${directory}">  
                <include name="**/*.*" />  
            </fileset> 
        </delete>
    </target> 

答案 5 :(得分:0)

您可以通过命令删除名称等于您需要的名称的文件列表来执行此操作。它比创建特殊目标更容易和更直接。而且你不需要任何其他工具,只需要纯粹的Ant。

    <delete>
        <fileset includes="name or names of file or files you need to delete"/>
    </delete>

http://ant.apache.org/manual/Types/fileset.html

答案 6 :(得分:0)

您可以将这种蛮力技术用作纯蚂蚁,这在无法使用附加条件的行家中特别有用。
如果目录已经存在,则mkdir将不执行任何操作;如果由于某种原因无法删除该文件夹,则删除将失败。文件不存在的情况在构建脚本中很常见,在该脚本中,构建步骤之一失败,但是执行了初始清理。

<target name="clean">
    <mkdir dir="${project.basedir}/dist" />
    <delete dir="${project.basedir}/dist" />
</target>