NLD
Antに独自の機能を組み込もう
Antを知らない人のために書いておこう。
AntはJavaソースをビルドしてくれるツールで、往年のビルドツールmakeみたいなものだ。
Ant自身もJavaで組まれている(と思う)。
それ以上はよく知らない。
Antでソースをビルドするのは便利だが、何か物足りないような気がしてくる。
機能を追加できないだろうか?
それはすでに次の段階に入りかけたことを意味する。
Antをハックする必要があるってことだ。
AntにTask(機能)を追加しよう。
追加するTaskはもちろんJavaで組む必要がある。
どうやって組み込むかって? Taskクラス(やっぱりこいつはabstractだ!)を継承して自作のクラスを作ればいい。
たとえば、そうタイムスタンプの機能にはうんざりだ。
なんで、時刻のタスクTSTAMPは秒を出力しないんだ?
jarを作るときに200102140030.jarだけで済むわけがない。
運が悪けりゃ60秒以内にデバッグしてビルドしただけで、ひとつ前のjarが上書きされてしまう。
では、秒も出力するタイムスタンプを作ればいい。
org.apache.tools.ant.taskdefs.Tstampクラスを参考にNiTstampクラスを作ってみる。
public class NiTstamp extends Task {
public void execute() throws BuildException {
try {
Date d = new Date();
SimpleDateFormat yyyyMMddHHmmss = new SimpleDateFormat ( "yyyyMMddHHmmss" );
project.setProperty( "yyyyMMddHHmmss", yyyyMMddHHmmss.format(d) );
setTaskName( "nitstamp" );
}
catch ( Exception e ) {
throw new BuildException( e );
}
}
} // class ends...
このようにexecuteメソッドを実装すればいい。
あとは、こいつをbuild.xmlに組み込むだけだ。
[組み込みに失敗して5分ほどハマってたのは内緒だ:-|]
build.xmlでは以下のように付け加える。
まず、NiTstampクラスがTaskだということを示す。
たぶんここで実体を作ってるんだろうが、よくは知らない。
jar作成。
この程度なら楽勝(でしょ)。クラスパスは適切に指定すること。
もし、意欲がわいたら何か便利なTaskを作って私にくれるととてもうれしい;-)のでよろしく。
NLD