macrodef Task
はじめに、macrodefは大規模なAntタスクを使うときに大いに役に立つでしょう。
逆に小規模な場合はantcallで十分な気もします。
特徴は
パラメターのデフォルトの値を用意できる。
Taskを渡せる。
テキストノードを渡せる。
の3つではないでしょうか。
<span id="redcode">注意事項は属性名には_(アンダーバー)は使えません</span>
特徴
defaultの値を用意できる。
defaultの値がない場合、呼び出し時に属性を渡さないとそこで実行を停止します
パラメータの値が空の場合、デフォルトの値を用意できる。
例えば以下ですとFTPには基本はユーザーanonymous パスワードはメールアドレスと言う風にできます。
<macrodef name="ftp"> <attribute name="server"/> <attribute name="remotedir"/> <attribute name="localdir"/> <attribute name="user" default="anonymous"/> <attribute name="password" default="test@test"/> <sequential> <taskdef name="ftptask" classname="org.apache.tools.ant.taskdefs.optional.net.FTP"/> <ftptask server="@{server}" remotedir="@{remotedir}" userid="@{user}" password="@{password}" depends="yes" binary="yes" > <fileset dir="@{localdir}"> </fileset> </ftp> </sequential> </macrodef> <br> <ftp server="${server}" remotedir="${remotedir}" localdir="${localdir}"/>
Taskを渡せる。
これを必須項目に変更することにより、abstractClassのような振る舞いをさせることも可能となるでしょう。
複雑な工程なタスクの場合、部分的にカスタマイズすることができる。
これですとFTP開始前、FTP終了後の処理内容を指定できます。
<macrodef name="ftp"> <element name="startAction"/> <element name="endAction"/> <attribute name="server"/> <attribute name="remotedir"/> <attribute name="localdir"/> <attribute name="user"/> <attribute name="password"/> <sequential> <startAction></startAction> <taskdef name="ftp" classname="org.apache.tools.ant.taskdefs.optional.net.FTP"/> <ftp server="@{server}" remotedir="@{remotedir}" userid="@{user}" password="@{password}" depends="yes" binary="yes" > <fileset dir="@{localdir}"> </fileset> </ftp> <endAction/> </sequential> </macrodef> <br> <ftp erver="${server}" localdir="${localdir}" remotedir="${remotedir}" userid="${user}" password="${password}"> <startAction><echo>start</echo></startAction> <endAction><echo>start</echo></endAction> </ftp>
テキストノードを渡せる
これにより改行を含んだ文字を容易に渡すことができる。
ただし一つだけのようだが。
たとえば、以下はどうでしょうか。
呼び出す側で以下のようにします
<macrodef name="setparameter"> <text name="text"/> <attribute name="name"/> <sequential> <property name="@{name}" value="@{text}"/> </sequential> </macrodef> <br> <setparameter name="test"> line1 line2 </setparameter> <echo message="${test}"/>
これで改行を含んだパラメーターを作成することができます。
他にもっといい方法があるかもしれないですが。