web-dev-qa-db-ja.com

ファイルが存在する場合にのみAntターゲットを実行するAntタスク?

特定のファイルが存在する場合にのみブロックを実行するANTタスクはありますか?特定の構成ファイルが存在する場合にのみ、特別な処理を行う必要がある汎用のantスクリプトがあるという問題があります。

150
Mario Ortegón

使用可能 および 条件

<target name="check-abc">
    <available file="abc.txt" property="abc.present"/>
</target>

<target name="do-if-abc" depends="check-abc" if="abc.present">
    ...
</target> 
199
toolkit

これはコーディングの観点からもう少し理にかなっているかもしれません(ant-contribで利用可能: http://ant-contrib.sourceforge.net/ ):

<target name="someTarget">
    <if>
        <available file="abc.txt"/>
        <then>
            ...
        </then>
        <else>
            ...
        </else>
    </if>
</target>
120
Adam

Ant 1.8.0以降、明らかにリソースが存在します

から http://ant.Apache.org/manual/Tasks/conditions.html

リソースの存在をテストします。 Ant 1.8.0以降

テストする実際のリソースは、ネストされた要素として指定されます。

例:

<resourceexists>
  <file file="${file}"/>
</resourceexists>

私はこの質問に対する上記の良い答えから例を修正しました、そしてこれを見つけました

Ant 1.8.0以降、代わりにプロパティ拡張を使用できます。値がtrue(またはonまたはyes)の場合はアイテムが有効になり、false(またはoffまたはno)の場合はアイテムが無効になります。他の値は引き続きプロパティ名であると想定されるため、名前付きプロパティが定義されている場合にのみアイテムが有効になります。

古いスタイルと比較すると、コマンドラインまたは親スクリプトから条件をオーバーライドできるため、柔軟性が向上します。

<target name="-check-use-file" unless="file.exists">
    <available property="file.exists" file="some-file"/>
</target>
<target name="use-file" depends="-check-use-file" if="${file.exists}">
    <!-- do something requiring that file... -->
</target>
<target name="lots-of-stuff" depends="use-file,other-unconditional-stuff"/>

http://ant.Apache.org/manual/properties.html#if+unless のantマニュアルから

うまくいけば、この例は一部の人にとって有用です。彼らはresourceexistsを使用していませんが、おそらくあなたはできますか?.....

26
Jon Stafford

この同様の答えを参照する価値があると思います: https://stackoverflow.com/a/5288804/6431

別の簡単なソリューションを次に示します。 <available>タグを使用して、これに関する他のバリエーションが可能です。

# exit with failure if no files are found
<property name="file" value="${some.path}/some.txt" />
<fail message="FILE NOT FOUND: ${file}">
    <condition><not>
        <available file="${file}" />
    </not></condition>
</fail>
12
cmcginty

DB_*/**/*.sqlなどのファイル名フィルターの使用を確認します

ワイルドカードフィルターに対応する1つ以上のファイルが存在する場合にアクションを実行するバリエーションを次に示します。つまり、ファイルの正確な名前がわかりません。

ここでは、再帰的に「DB _ *」と呼ばれるサブディレクトリで「*。sql」ファイルを探しています。必要に応じてフィルターを調整できます。

注意:Apache Ant 1.7以降!

一致するファイルが存在する場合にプロパティを設定するターゲットは次のとおりです。

<target name="check_for_sql_files">
    <condition property="sql_to_deploy">
        <resourcecount when="greater" count="0">
            <fileset dir="." includes="DB_*/**/*.sql"/>
        </resourcecount>
    </condition>
</target>

ファイルが存在する場合にのみ実行される「条件付き」ターゲットは次のとおりです。

<target name="do_stuff" depends="check_for_sql_files" if="sql_to_deploy">
    <!-- Do stuff here -->
</target>
2
David Robson

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

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

FileSet を参照してください。

0
Gangnus