Antはすでにある組み込みタスクを使うだけでなく、自分でタスクを作成することもできます。カスタムのタスクを作る方法を調べたのでやり方をメモっておきます。
カスタムタスクはorg.apache.tools.ant.Taskクラスを拡張して作成します。そして実行したい処理を
public void execute() throws BuildException;
にoverrideするだけみたいですね。さてサンプルとして、以下のようなタスククラスを作成しました。
package nu.mine.kino.ant; import org.apache.tools.ant.BuildException; import org.apache.tools.ant.Task; public class SampleTask extends Task { private String message; public void execute() throws BuildException { System.out.println("エコーしてます: " + message); } public String getMessage() {return message;} public void setMessage(String message) {this.message = message;} }
このタスククラスに対応するビルドファイルは以下のようになります。
<taskdef name="sampletask" classname="nu.mine.kino.ant.SampleTask" classpath="./sample.jar" /> <target name="sample"> <sampletask message="hogehoge" /> </target>
taskdefでタスクを定義しています。属性の設定内容は以下の通り
またこのビルドファイルには
<sampletask message="hogehoge" />
というようにmessege属性がありますが、これはタスククラスのmessageフィールドのgetter/setterに対応しています。
ビルドファイル(build.xml)全体は以下の通りです。
<?xml version="1.0" encoding="Shift_JIS"?> <project name="taskdef_sample" default="sample"> <taskdef name="sampletask" classname="nu.mine.kino.ant.SampleTask" classpath="./sample.jar" /> <target name="sample"> <sampletask message="ハローワールド" /> </target> </project>
さて実行してみます。
Buildfile: T:\workspace3.2_plugin\AntSamples\build.xml sample: [sampletask] エコーしてます: ハローワールド BUILD SUCCESSFUL Total time: 172 milliseconds
確かにexecuteが実行されました。。
上の例で、タスクに属性を定義したい場合はタスククラスにSetterを作ればよいとわかりました。次にネストした要素を定義する場合です。たとえば
<?xml version="1.0" encoding="Shift_JIS"?> <project name="taskdef_sample" default="sample"> <taskdef name="sampletask" classname="nu.mine.kino.ant.SampleTask" classpath="./sample.jar" /> <target name="sample"> <sampletask> <echo message="hoge" /> </sampletask> </target> </project>
などのようにしたい場合ですね。
ネストはタスククラスに
public Object create[タグ名]();
を実装すればよいようです。たとえばこんな感じ。
package nu.mine.kino.ant; import org.apache.tools.ant.BuildException; import org.apache.tools.ant.Task; public class SampleTask extends Task { private Echo echo; public void execute() throws BuildException { System.out.println("エコーしてます: " + echo.getMessage()); } public Echo createEcho() { <-createXXXメソッド if (echo == null) { echo = new Echo(); } return echo; } }
Echoクラスは以下の通り、通常のJavaBeans?です。
package nu.mine.kino.ant; public class Echo { private String message; public String getMessage() {return message;} public void setMessage(String message) {this.message = message;} }
では実行してみます。
Buildfile: T:\workspace3.2_plugin\AntSamples\build.xml sample: [sampletask] エコーしてます: hoge BUILD SUCCESSFUL Total time: 454 milliseconds
確かにネストしたタグの値を表示することができました。。
この記事は
現在のアクセス:16877