Ant/Condition の変更点
- 追加された行はこの色です。
- 削除された行はこの色です。
- Ant/Condition へ行く。
- Ant/Condition の差分を削除
--- title: AntでConditionタスクを使った条件分岐を行う author: aterai pubdate: 2007-03-13 description: Conditionタスクを使って、Targetタスクを実行するかどうかを振り分けます。 --- #contents * 概要 [#summary] `Condition`タスクを使って、例えばディレクトリの有無などによる条件で、`Target`タスクを実行するかどうかを振り分けます。 `Script`タスクを使用する方法は、[[AntのScriptタスク中でif文を使った条件分岐を行う>Ant/Script]]に移動しました。 * サンプルターゲット [#example] #code{{ <!-- リソースディレクトリが存在すれば、プロパティ:have.resourcesは真 --> <condition property="have.resources"> <available file="${res.dir}" /> </condition> <!-- ターゲット:prepare-resourceは、プロパティ:have.resourcesが 真の場合実行される --> <target name="prepare-resource" depends="prepare" if="have.resources"> <!-- 以下、ビルド用のリソースディレクトリを作って、リソースをコピー --> <mkdir dir="${build.res}" /> <native2ascii encoding="UTF-8" src="${res.dir}" dest="${build.res}" includes="**/*.properties.utf8" ext="" /> <copy todir="${build.res}"> <fileset dir="${res.dir}" excludes="**/*.properties.*, **/*.bak" /> </copy> </target> ...省略... <!-- ターゲット:compileで、ターゲット:prepare-resourceは呼び出されるが、 実行されるかどうかはプロパティ:have.resourcesの値による --> <target name="compile" depends="prepare-src, prepare-resource"> <javac srcdir="${build.src}" destdir="${build.dest}" encoding="${compile.encoding}" debug="${compile.debug}" optimize="${compile.optimize}" source="${compile.source}" deprecation="${compile.deprecation}" classpathref="project.class.path" /> </target> }} - [[Resourceファイルからメニューバーを生成>Swing/ResourceMenuBar]]の[https://ateraimemo.com/swing/resourcemenubar/src.zip src.zip]などを参照 * 解説 [#explanation] 上記のサンプルでは、`Condition`タスクを使って、`have.resources`プロパティに真偽を代入しています。 上記のサンプルでは`Condition`タスクを使用して`have.resources`プロパティに真偽を代入しています。 `prepare-resource`ターゲットは、`properties`ファイルをユニコードエスケープしますが、これは、`have.resources`プロパティが真(`if="have.resources"`)の場合だけ実行されます。このため、リソースディレクトリが無い(エスケープする`properties`ファイルが無い)場合、あとで`compile`ターゲットで、`prepare-resource`ターゲットは呼び出されていますが、何もしないというサンプルになっています。 - `prepare-resource`ターゲットは`properties`ファイルをユニコードエスケープし、`have.resources`プロパティが真(`if="have.resources"`)の場合のみ実行 - このためリソースディレクトリが存在しない(エスケープする`properties`ファイルがない)場合、`compile`ターゲットで`prepare-resource`ターゲットが呼び出されて何も実行しない ---- 以下は、同様に`Condition`タスクを使って、`lib`ディレクトリが存在する場合、その下にある`jar`ファイルをパスに含めるように上書きするためのサンプルです。 #code{{ <path id="project.class.path"> <pathelement location="${build.dest}" /> <pathelement path="${java.class.path}" /> </path> <condition property="have.library"> <available file="${lib.dir}" /> </condition> <target name="init" if="have.library"> <path id="project.class.path"> <pathelement location="${build.dest}" /> <fileset dir="${lib.dir}"> <include name="*.jar" /> </fileset> <pathelement path="${java.class.path}" /> </path> </target> }} - [[JToolBarでアイコンボタンを右寄せ>Swing/ToolBarLayout]]の、[https://ateraimemo.com/swing/toolbarlayout/src.zip src.zip]などを参照 * 参考リンク [#reference] - [https://ant.apache.org/manual/Tasks/conditions.html Conditions Task] - [https://ant.apache.org/manual/ifunless.html If and Unless on all tasks/nested elements] -- `Ant 1.9.1`からタスクなどに`if`、`unless`属性を使用可能になった * コメント [#comment] #comment - `Script`タスクを使用する方法は、[[AntのScriptタスク中でif文を使った条件分岐を行う>Ant/Script]]に移動しました。 -- &user(aterai); &new{2011-01-18 (火) 22:46:59}; #comment