アキはフリーランスのプログラマーです >> Java >> Ant

このエントリーを含むはてなブックマーク このエントリーを含むECナビ人気ニュース

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}"/>

これで改行を含んだパラメーターを作成することができます。


他にもっといい方法があるかもしれないですが。


このエントリーを含むはてなブックマーク このエントリーを含むECナビ人気ニュース