2011-06-13 243 views
30

使用ANT,我如何在尝试删除它之前确保该目录存在?如何使用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,我该如何检查目录是否存在?

+0

是否有你需要检查目录中删除之前存在的理由吗? – 2011-09-08 23:06:12

回答

11

尼斯和下方干净的解决方案: 使用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>
13

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

<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
了类似的问题

35

对于这个特定的情况下,我不会回答这个问题:“如何找到某个目录是否存在“,因为这已经得到了解答,但我只想指出,在你干净的任务中,你可以使用failonerror="false"来防止蚂蚁任务退出。这应该适合干净的任务,因为如果没有什么要清理的话,这应该不成问题。

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

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

+14

如果有东西需要清理,但是在某些其他错误时失败,例如某人已经锁定目录中的文件进行编辑?你想要报告这些错误。 – Carlos 2014-08-27 07:39:10

+0

简单。清洁。很好的答案。 – 2015-02-10 19:17:46

+2

我同意卡洛斯。您将错过failonerror =“false”的真实错误。要忽略所有类型的错误,以避免失败,如果一切都已经干净接缝是一个坏主意。 – niks 2016-03-02 10:54:38

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

1

下面是答案:

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