使用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
,如何检查目录是否存在?
对于这个特定的情况,我不会回答"如何查找目录是否存在"的问题,因为这个问题已经得到了回答,但我只想指出,在清理任务中,可以使用failonerror="false"
来阻止ant任务退出。这应该适用于清洁任务,因为如果没有什么需要清洁的,那应该不是问题。
<target name="clean" description="clean">
<delete dir="${build}" failonerror="false"/>
....
<delete dir="${report}" failonerror="false"/>
</target>
如果您不想安装ant contrib或由于某种原因无法安装,这将非常有用。
对于香草蚂蚁,您可以使用类似=的东西
<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检查一组文件是否存在
对于类似的问题
下面是一个漂亮干净的解决方案:使用蚂蚁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>
查看可用任务。
这里有一个类似的问题。
我有办法检查Ant中是否存在目录(而不是文件)吗?
答案如下:
<target name="delete.target.directory">
<delete includeemptydirs="true" verbose="false" if="${(directory::exists(directory))}">
<fileset basedir="${directory}">
<include name="**/*.*" />
</fileset>
</delete>
</target>
您可以通过命令删除名称与所需名称相同的文件列表来完成此操作。这比创建一个特殊目标要简单直接得多。而且您不需要任何额外的工具,只需要纯Ant即可。
<delete>
<fileset includes="name or names of file or files you need to delete"/>
</delete>
http://ant.apache.org/manual/Types/fileset.html
您可以将这种蛮力技术用作纯蚂蚁,这在没有附加条件的maven中特别有用
如果目录已经存在,mkdir将不执行任何操作;如果由于某种原因无法删除文件夹,则删除操作将失败。文件不存在的情况在构建脚本中很常见,其中一个构建步骤失败,但执行了初始清理。
<target name="clean">
<mkdir dir="${project.basedir}/dist" />
<delete dir="${project.basedir}/dist" />
</target>