Using ANT
, how can i make sure that directory exists before attempting to remove it?
As part of my current clean task, i
You can use this brute force technique as pure ant, which is specially useful in maven where the additional conditionals aren't available.
The mkdir will do nothing if the directory already exists, and the delete will fail if the folder cannot be deleted for some reason. The condition of the file not being there is common in a build script where one of the build steps fail but the initial clean was performed.
<target name="clean">
<mkdir dir="${project.basedir}/dist" />
<delete dir="${project.basedir}/dist" />
</target>
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.
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>
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>
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)?
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