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}"/>
これで改行を含んだパラメーターを作成することができます。
他にもっといい方法があるかもしれないですが。
