如何在删除之前检查目录是否存在,使用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,如何检查目录是否存在?

对于这个特定的情况,我不会回答"如何查找目录是否存在"的问题,因为这个问题已经得到了回答,但我只想指出,在清理任务中,可以使用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>

相关内容

  • 没有找到相关文章

最新更新