- Home ›
- Apache Antの使い方 ›
- build.xmlの概要 ›
- HERE
build.xml
ではここからAntで実際に実行してもらう処理をどのように記述するかを見ていきます。
Antではまず何をどのようにするのかを記述した「build.xml」というXML形式で書かれたファイルを用意します。Antの起動時にどの設定ファイルを使ってAntを実行するかを指定するのですが、引数を指定しなかった場合はデフォルトで「build.xml」というファイルを読み込みます。
前のページで「ant」とコマンドラインから実行した場合の画面をもう一度見てください。
画面には「build.xml」ファイルが見つからない、というエラーメッセージが表示されています。これはantコマンドを実行したディレクトリにbuild.xmlファイルが存在しないためです。
では「build.xml」ファイルの記述方法を見ていきましょう。大きく分けると「project」「target」「task」「property」の4つの要素が存在します。
XML宣言
build.xmlファイルはXML形式のファイルですので、まずファイルの先頭にXML宣言を記述します。(XML宣言については『』を参照して下さい)。実際には下記のように記述します。(XMLファイルの文字コードをShift_JISで記述した場合です)。
<?xml version="1.0" encoding="Shift_JIS" ?>
project要素
project要素は「build.xml」ファイルのトップレベルの要素です。1つだけ記述することが出来ます。
<?xml version="1.0" encoding="Shift_JIS" ?> <project name="antsample"> </project>
project要素には3つの属性を指定することが出来ます。
属性 | 説明 | 必須 |
---|---|---|
name | プロジェクトの名前 | × |
default | デフォルトで実行するタスク名 | × |
basedir | パス指定のベースになるディレクトリ | × |
「name」属性はこのプロジェクトの名前を指定します。名前は自由に付けて頂いて構いません。この属性は必須ではありません。
「default」属性は、プロジェクト内に記述された複数のタスクの中で、タスクを指定せずに実行した場合にどのタスクを実行するかを指定します。この属性はAnt 1.6.0以降では必須ではなくなりましたが、指定しておいた方がいいかと思います。
「basedir」属性は、プロジェクト内でパスの位置を指定する時にベースとなるディレクトリです。この属性は必須項目ではありません。指定されなかった場合はantを実行したカレントディレクトリになります。
target要素
target要素は後で説明するタスクの集まりをまとめたものです。複数のターゲットを1つプロジェクト内に記述することが出来ます。antを実行する場合に、プロジェクト内のどのタスクを実行するかを指定します。(指定しない場合は、project要素のdefault属性で指定したタスクが実行されます)。
<?xml version="1.0" encoding="Shift_JIS" ?> <project name="antsample"> <target name="target1"> </target> <target name="target2"> </target> </project>
target要素には5つの属性を指定することが出来ます。
属性 | 説明 | 必須 |
---|---|---|
name | ターゲットの名前 | 必須 |
depends | 依存しているターゲット | × |
if | ターゲットを実行するために設定されていなければならないプロパティ名 | × |
unless | ターゲットを実行するために設定されていてはならないプロパティ名 | × |
description | ターゲットの機能の簡単な説明 | × |
「name」属性はこのターゲットの名前を指定します。名前は自由に付けて頂いて構いません。この属性は必須です。
「depends」属性はこのターゲットが他のターゲットに依存している場合、その依存しているターゲット名を指定します。依存しているというのは、このターゲットに含まれるタスクを実行する前に、先に実行しておかなければならないターゲットがある場合、その先に実行が必要なターゲットに依存していると言います。この属性は必須ではありません。
task要素
task要素は実行する具体的な処理を記述します。コンパイルするとか、ファイルをコピーするとか、などの実際に行う処理です。タスクはターゲット要素内に記述され、1つのターゲット要素内に複数のタスク要素を記述することが出来ます。
タスクは実際に行う処理毎に別々の要素が用意されています。下記では、ターゲット1にコンパイルを行うタスクとファイルをコピーするタスクの2つが定義されています。またターゲット2には画面にメッセージを表示するタスクが記述されています。
<?xml version="1.0" encoding="Shift_JIS" ?> <project name="antsample"> <target name="target1"> <javac srcdir="${src}" destdir="${build}"/> <copy file="myfile.txt" tofile="mycopy.txt"/> </target> <target name="target2"> <echo message="Hello, world"/> </target> </project>
この例では「javac」要素、「copy」要素、「echo」要素、がタスクとなります。
property要素
プロパティはbuild.xml内で使われる値を定数として定義しておくために使われます。同じ値を色々な場所で直接記述してしまうと、後で修正が発生した場合に面倒ですが、値をプロパティ名として定義し、値の変わりにプロパティ名を使って記述していくことで、後で修正が必要な場合にもプロパティの定義だけを変更するだけで済みます。
<?xml version="1.0" encoding="Shift_JIS" ?> <project name="antsample"> <property name="src" location="src"/> <property name="build" location="build"/> <target name="target1"> <javac srcdir="${src}" destdir="${build}"/> <copy file="myfile.txt" tofile="mycopy.txt"/> </target> <target name="target2"> <echo message="Hello, world"/> </target> </project>
上記ではプロパティとして「src」プロパティと「build」プロパティを定義し、タスクの中で実際に使っています。タスク内でプロパティ名記述する場合は下記のように記述します。
${プロパティ名}
実際にテスト
細かい利用方法やタスクとして用意されている各要素の確認は次のページ以降で確認しますが、取りあえずテストを行ってみます。ここでは画面にメッセージを表示するだけの「echo」タスクを試してみます。
<?xml version="1.0" encoding="Shift_JIS" ?> <project name="antsample" default="msgtarget"> <target name="msgtarget"> <echo message="Hello, world"/> </target> </project>
上記をテキストファイルなどに記述し、「build.xml」という名前で保存します。そして、その「build.xml」ファイルがあるディレクトリ上で「ant」と実行してみて下さい。
画面にはビルドの結果やかかった時間の他に、タスクで実行を指定した「Hello, world」を画面に表示しています。
( Written by Tatsuo Ikura )