How to check if directory exists before deleting i

2019-03-09 20:56发布

问题:

Using ANT, how can i make sure that directory exists before attempting to remove it?

As part of my current clean task, i

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

This works well, however (obviously) remove happens when there is something to remove.

Using ANT, how can i check if directory exist?

回答1:

For this specific case, I'm not going to answer the question "how to find if a directory exists", because that's already been answered, but I'm just going to point out that in your clean task you can use failonerror="false" to keep the ant task from exiting. This should be suitable in a clean task because if there's nothing to clean, it should not be a problem.

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

This is useful if you don't want to install ant-contrib or can't for some reason.



回答2:

with vanilla ant you would use something like =

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

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

else see = Ant check existence for a set of files
for a similar question



回答3:

Nice and clean solution below: Using ant-contribs.jar

When using this solution, be sure to put the following line on top

<!-- 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>


回答4:

Check out the available task.

Here's a similar question.

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



回答5:

Here is the answer :

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


回答6:

You can do it by ordering to delete a list of files with names equal to the name you need. It is much easier and direct than to create a special target. And you needn't any additional tools, just pure Ant.

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

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



标签: ant build