回答:
<target name="check-abc">
<available file="abc.txt" property="abc.present"/>
</target>
<target name="do-if-abc" depends="check-abc" if="abc.present">
...
</target>
if
およびunless
属性は、それらが接続されているターゲットのみを有効または無効にします。つまり、ターゲットの依存関係は常に実行されます。それ以外の場合は、チェック対象のプロパティを設定するターゲットに依存しても機能しません。
<Available>
廃止予定のようです。:私はこれを使用しました <target name="do-if-abc" if="${file::exists('abc.txt')}"> ... </target>
:チェックnant.sourceforge.net/release/0.85/help/functions/...
<available>
廃止予定であると記載されている場所は?2: ${file::existst...}
Ant(Apache ANT 1.9.7)で動作していないようです
これはコーディングの観点からもう少し理にかなっているかもしれません(ant-contrib:http : //ant-contrib.sourceforge.net/で利用可能):
<target name="someTarget">
<if>
<available file="abc.txt"/>
<then>
...
</then>
<else>
...
</else>
</if>
</target>
Ant 1.8.0以降、明らかにresourceexistsも存在します
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を使用していませんが、おそらくあなたはできますか?.....
if="${file.exists}"
に置き換え、値ではなく名前でプロパティの存在のみを確認する必要があることに注意してください。if="file.exists"
if
unless
私はこの同様の答えを参照する価値があると思います:https : //stackoverflow.com/a/5288804/64313
ここに別の簡単な解決策があります。<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>
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>