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

Jam*_*sev 33 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>
Run Code Online (Sandbox Code Playgroud)

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

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

eka*_*gas 38

对于这个特定情况,我不打算回答"如何查找目录是否存在"的问题,因为已经回答了这个问题,但我只是要指出,在你的清洁任务中你可以failonerror="false"用来保持退出的蚂蚁任务.这应该适合于干净的任务,因为如果没有什么可以清理,那应该不是问题.

    <target name="clean" description="clean">
        <delete dir="${build}" failonerror="false"/>
        ....
        <delete dir="${report}" failonerror="false"/>
    </target>
Run Code Online (Sandbox Code Playgroud)

如果您不想安装ant-contrib或由于某些原因不能安装ant-contrib,这将非常有用.

  • 如果有什么东西需要清理但是在某些其他错误上失败了,例如有人将文件锁定在目录中进行编辑会怎么样?您希望报告这些错误. (15认同)
  • 我同意卡洛斯的观点.你将错过failonerror ="false"的实际错误.要忽略所有类型的错误只是为了避免失败,如果一切都已经是干净的接缝是一个坏主意. (2认同)

Reb*_*bse 16

与香草蚂蚁你会使用像=

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

 <target name="deldir" depends="check" if="deldir">
 <delete dir="${somedir}"/>
    <!-- .. -->
 </target>
Run Code Online (Sandbox Code Playgroud)

else see = Ant检查是否存在
类似问题的一组文件


Jam*_*sev 13

下面的好用且干净的解决方案: 使用ant-contribs.jar

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

<!-- For <if> statements -->
<taskdef resource="net/sf/antcontrib/antlib.xml" />
Run Code Online (Sandbox Code Playgroud)

<!-- 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>
Run Code Online (Sandbox Code Playgroud)