web-dev-qa-db-ja.com

ANTを使用して、削除する前にディレクトリが存在するかどうかを確認するにはどうすればよいですか?

ANTを使用して、削除する前にディレクトリが存在することを確認するにはどうすればよいですか?

私の現在のクリーンタスクの一環として、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>

これはうまく機能しますが、削除するものがあると(明らかに)削除が発生します。

ANTを使用して、ディレクトリが存在するかどうかを確認するにはどうすればよいですか?

33
JAM

以下のきれいできれいなソリューション:Using 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
JAM

この特定のケースでは、「ディレクトリが存在するかどうかを確認する方法」という質問には答えません。それはすでに答えられているからですが、クリーンタスクではfailonerror="false" antタスクが終了しないようにします。これは、クリーンなタスクに適している必要があります。クリーンにするものが何もない場合は問題にならないからです。

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

これは、ant-contribをインストールしたくない場合、または何らかの理由でインストールできない場合に便利です。

38
ekangas

vanilla antでは、=のようなものを使用します

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

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

それ以外の場合= = 一連のファイルの存在をチェックしない
同様の質問

16
Rebse

利用可能なタスクを確認してください。

同様の質問があります。

ファイルではなく)Antのディレクトリの存在を確認する方法はありますか?

3
pjeong

答えは次のとおりです。

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

必要な名前と同じ名前のファイルのリストを削除するように命令することにより、それを行うことができます。特別なターゲットを作成するよりもはるかに簡単で直接的です。また、追加のツールは不要で、純粋なAntだけです。

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

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

0
Gangnus