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を作って私にくれるととてもうれしい;-)のでよろしく。




    更新履歴
  • 2001.08.14 upload
  • 2001.02.12 たぶんこの文章を書いた日( この文章は、以前にこのあたり → http://www.ncfreak.com/project/webmaga/ ← でサンプルとして公開してました)


NLD