検索
連載

Antで使う新規タスクにネストした要素を渡すJavaTips 〜Apache/Jakarta編

PC用表示
Share
Tweet
LINE
Hatena

 本Tipsは、Javaのクラスとして実装したAntの新規タスクにネストした要素を渡す方法を説明します。Antで使用するタスクを作成する方法の基本については、「Antで使う新規タスクを作成する」を、Antで使用するタスクにパラメータを渡す方法については、「Antで使う新規タスクにパラメータを渡す」を参照してください。

Antで使用可能なデータ構造とjavaクラス

 Antでは、ビルドファイル中のタスク要素の子要素としてデータ構造をネストすることで、ネストしたデータ構造を当該タスクのパラメータとして渡すことができます。例えば<javac>タスクはネストした要素として<fileset>データ構造を取ることができ、ネストした<fileset>によって示されるJavaソースファイルをコンパイルします。

 Antで扱えるデータ構造はそれぞれJavaのクラスとして実装されています。Antでは任意のクラスをデータ構造として使用することができます。Antのデータ構造ではXMLの属性としてパラメータを渡すことができます。あるデータ構造でXxx(Xxxは任意の英数字かアンダーライン)というパラメータを使用したい場合は、対応するJavaクラスにsetXxxメソッドを実装します。このsetXxxメソッドの詳細については、「Antで使う新規タスクにパラメータを渡す」のTipsで説明したsetXxxメソッドと同様ですので、そちらを参照してください。

 Antではデフォルトでいくつかのデータ構造が使用可能になっています。これらのうち主要なものについて、データ構造とJavaクラスの対応表を以下に示します。

Antでのデータ構造 Javaのクラス
fileset org.apache.tools.ant.types.FileSet
filelist org.apache.tools.ant.types.FileList
dirset org.apache.tools.ant.types.DirSet

ネストした要素を取る新規タスクを作成する

 新規タスクでネストした要素を取れるようにする方法はいくつかありますが、ここではcreateYyyメソッド(Yyyはネスト可能な要素の要素名で、大文字・小文字同一視)を使用する方法について説明します。createYyyメソッドは引数なしで、ネストする要素に対応するJavaクラスのインスタンスを戻り値とします。createYyyメソッド内には以下のような処理を実装します。

  • ネストする要素に対応するJavaクラスのインスタンスを新規作成する。
  • 同一要素を複数ネスト可能にする場合は、新規作成したインスタンスへの参照をコレクション等に保存しておく
  • 新規作成したインスタンスをメソッドの戻り値とする

 Antは、ビルドファイルの処理中に、タスクの要素にネストしたYyy要素があると、当該タスクの処理を行うJavaクラスのcreateYyyメソッドを呼びます。複数のYyy要素がネストされていたときは、ネストされている数だけcreateYyyメソッドが呼ばれます。

 ここでは、タスクにネスト可能なデータ構造として、Antのデフォルトで使用可能な<fileset>と、このタスクでのみ使用可能な独自データ構造<mymessage>を取るタスクをSampleTask3というクラスとして作成します。<mymessage>はMyOwnNestedElementクラスとして実装されており、属性textを取るものとします。

MyOwnNestedElement.java

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***


SampleTask3.java

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***


ネストした要素を取る新規タスクを実行する

 sampletask3.jar内にSampleTask3.classとMyOwnNestedElement.classが入っており、ディレクトリ構造が以下のようになっている場合に、上記タスクを実行するビルドファイルbuild.xmlの記述例と、このビルドファイルの実行結果を以下に示します。

ディレクトリ構造

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***


build.xml

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***


実行結果

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***


Copyright © ITmedia, Inc. All Rights Reserved.

ページトップに戻る