Antで複雑な処理を行う場合、既存のタスクだけでは機能が不十分なことがあります。そのような場合、それらの処理をJavaクラスのmainメソッドとして実装し、Javaタスクでmainメソッドを呼ぶことで処理を行う方法があります。しかし、この方法の場合、以下のような問題が生じます。
- パラメータや処理対象ファイルをすべて、コマンドライン引数として渡さなければならないため、Antスクリプトの記述性が悪くなる
- Javaクラス内でコマンドライン引数を解釈する必要があり、実装が面倒になる
これらの問題を解決する方法の1つとして、Javaクラスで不足する機能をAntのタスクとして実装し、そのタスクをtaskdefタスクを使用してAntから使用できるようにするという方法が挙げられます。この方法には、以下のようなメリットがあります。
- パラメータをAntタスクの属性として渡せる
- filesetのようなデータ構造をタスクにネストし、Antスクリプト内で使用可能なデータ構造を新規タスクに渡せる
本稿では、新規にAntで使用するタスクを作成する際の基本的な方法として、標準出力に「Hello Anttask」と表示するだけのタスクの作成方法と使用方法を紹介します。パラメータやネストした要素を取るようなタスクを作成する方法については、今後のTipsで紹介していきます。
新規タスクを作成する
Antで使用するタスクを新規に生成するには、org.apache.tools.ant.Taskを継承したクラスを作成し、executeメソッド内にタスクとしての処理を実装します。タスクの処理中にエラーが発生した場合は、BuildExceptionをスローします。以下に、新規タスクの実装例を示します。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
新規タスクをAntスクリプトから使用可能にする
Antスクリプトから新規タスクを使用できるようにするには、まず新規タスクの実装クラスを含んだJARファイルを作成します。次に、Antスクリプト内のtaskdefタスクでそのJARファイル参照して、新規タスクを使用可能にします。taskdefタスクのname属性値には新規タスクのタスク名を、classname属性には新規タスクの処理を実装したクラスのクラス名を入れます。新規タスクのクラスを含むJARファイルがクラスパスに入るように、JARファイルへのパスをtaskdefタグのclasspath属性値、またはtaskdefタグにネストしたclasspathタグで指定しておきます。
新規タスクを実行する
sampletask.jar内にSampleTask.classが入っており、ディレクトリ構造が以下のようになっていると仮定します。
- D:\work\sampletask\build.xml
- D:\work\sampletask\sampletask.jar
上記タスクを実行するビルドファイル「build.xml」の記述例を、以下に示します。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
このビルドファイルの実行結果は以下のようになります。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
Copyright © ITmedia, Inc. All Rights Reserved.