- 2.1. プロジェクト(Project)
- 2.2. ターゲット(Target)
- 2.3. タスク(Task)
2.2. ターゲット(Target)
ターゲットとは、たとえばコンパイルであるとか、ある目的を達成するための一連の処理(タスク)の集合です。ひとつのプロジェクト内には複数のターゲットを記述することができます。
ターゲット要素で指定できる、または指定しなければいけない属性は以下のとおりです。この中で必ず指定しなければいけない属性はnameだけです。
属性名 | 説明 |
必須
|
name | ターゲットの名前。 |
●
|
depends | このターゲットを実行する前に必ず実行しなければいけないターゲット。カンマで区切って複数指定することができます。 |
|
if | このターゲットを実行するために設定されてなければいけないプロパティの名前。もしここで指定したプロパティに何も値が設定されていなければ、ターゲットのタスクは実行はされません。 |
|
unless | このターゲットを実行するために設定されていてはいけないプロパティの名前。もしここで指定したプロパティに何か値が設定されていれば、ターゲットのタスクは実行されません。 |
|
description | このターゲットの機能の簡単な説明。Ant を -projecthelp オプションで起動したときに、ここで指定した説明が表示されます。 |
|
ターゲット間の依存性を指定するためにdepends属性を使用します。ターゲット間の依存性とは、たとえばあるJavaアプリケーションをテストしたりインストールするためには、事前に必ずコンパイルされてないといけないというようなものが考えられます。このとき、「テスト」ターゲットと「インストール」ターゲットは「コンパイル」ターゲットに依存しているといえます。ひとつのターゲットが複数のターゲットに依存しているということも考えられます。たとえば「テスト」ターゲットは「テストデータ作成」ターゲットにも依存しているかもしれません。
このように依存しているターゲットがあるとき、depends属性で指定してやります。依存しているターゲットが複数存在するときはカンマで区切って記述します。
上記の例をビルドファイルに記述してやると次のようになります。
<project name="sample_project" default="compile" basedir="."> <target name="compile"> <!-- コンパイルを実行するタスク --> </target> <target name="create-test-data"> <!-- テスト用のデータを生成するタスク --> </target> <target name="test" depends="compile,create-test-data"> <!-- テストを実行するタスク --> </target> <target name="install" depends="compile"> <!-- インストールを実行するタスク --> </target> </project>
このように記述しておけば、
$ ant test
と実行したときに、自動的にコンパイル、テストデータ作成、テストまで行われます。
Antでは多段階の依存性も自動的に解決されます。たとえばAがBに依存し、さらにBがCに依存しているときは、当然AはCにも依存しているといえます。しかし、このようなときでも、
<target name="A" depends="B,C"> ..... </target> <target name="B" depends="C"> ..... </target>
と記述する必要は無く、次のように直接的な依存性のみ記述してやればよいのです。
<target name="A" depends="B"> ..... </target> <target name="B" depends="C"> ..... </target>
この記述でも、Aをビルドしようとすると、自動的にCとBのビルドが行われます。なお、上の例の様にAとBそれぞれにCへの依存性を記述してしまったとしても、Aのビルド時にCのビルドが2度行われるということはありません。それぞれのターゲットの実行は、1回のAntの実行につき最大1度しか実行されないようになっています。
if/unless属性は特定のプロパティ値の有無によってターゲットのタスクを実行するかどうかを制御するために用いられます。if/unless属性はあくまでターゲット内のタスクを実行するかどうかを制御するだけであり、ターゲット間の依存性には影響を与えません。たとえば次の例で、ターゲットBが実行されるとき、testプロパティが設定されているかどうかにかかわらずターゲットAは実行されます。
$ cat build.xml <project name="sample_project" default="A" basedir="."> <target name="A"> <echo>building target A</echo> </target> <target name="B" if="test" depends="A"> <echo>building target B</echo> <echo>test = ${test}</echo> </target> </project> $ ant B Buildfile: build.xml A: [echo] building target A B: BUILD SUCCESSFUL Total time: 1 second $ ant -Dtest=hoge B Buildfile: build.xml A: [echo] building target A B: [echo] building target B [echo] test = hoge BUILD SUCCESSFUL Total time: 1 second