タスクの一部をサブルーチンのようにして呼び出すことが出来る。
targetタグには、dependsという属性がある。
これは、自分のターゲットを実行する前に、準備(前提条件)として呼び出す為の別タスク(ターゲット)を指定するもの。
例えば、コンパイルする前にコンパイル先のディレクトリーを作っておく、といった用途に使用する。
<?xml version="1.0" encoding="EUC-JP"?>
<project name="depends_sample" basedir="." default="compile">
<property name="classes" location="../classes" />
<target name="init">
<mkdir dir="${classes}" />
</target>
<target name="compile" depends="init">
<javac destdir="${classes}">
<src path="../src" />
</javac>
</target>
</project>
depends属性には、カンマ区切りで複数のターゲット名を指定できる。
その場合、一番左に指定したものから順番にターゲットが実行される。
別ターゲットを呼び出すコアタスク。
(org.apache.tools.ant.taskdefs.CallTarget extends Task)
別ターゲットにパラメーター(プロパティー)を渡してサブルーチンの様に使用する。
しかしそういう目的なら、macrodefの方がスマート。
(そもそもターゲットはantコマンドからターゲット名を指定して実行できるものなので、サブルーチンの様に使うのは違和感がある)
→最新antcall
→別ファイルのターゲットを呼び出すタスク
| 属性 | 説明 |
|---|---|
| target | 呼び出すターゲット名。 |
| タグ(使用例) | 説明 |
|---|---|
<param name="プロパティー名" value="値" /> |
呼び出した先で使用するプロパティーを設定する。 「param」という名前だが、実体はpropertyなので、propertyタグと同じ属性を設定できる。 |
C:\temp\fromの下のaaa,bbbというディレクトリーを順番にコピーする例。
<?xml version="1.0" encoding="Shift_JIS"?>
<project name="antcall_sample" default="copy_all" basedir="." >
<target name="copy">
<echo message="${dir}" />
<copy todir="C:\temp\to\${dir}" preservelastmodified="true">
<fileset dir="C:\temp\from\${dir}" />
</copy>
</target>
<target name="copy_all">
<antcall target="copy">
<param name="dir" value="aaa" />
</antcall>
<antcall target="copy">
<param name="dir" value="bbb" />
</antcall>
</target>
</project>
複数のタスクをまとめてマクロを作るコアタスク(Ant1.6以降)。
(org.apache.tools.ant.taskdefs.MacroDef extends AntlibDefinition)
作ったマクロは、普通にタスクがあるかのようにbuild.xml上に書いて実行することが出来る。
(そういう意味ではtaskdefのような感じか)
| 属性 | 説明 |
|---|---|
| name | マクロ名。この名前をタスク名の様に使ってタスク呼び出しを記述する。 |
| タグ(使用例) | 説明 |
|---|---|
<attribute name="属性名" /> |
マクロ呼び出しで記述する属性を定義する。 ここで定義した属性は、「@{属性名}」で使用することが出来る。 |
<sequential>〜</sequential> |
マクロの内容を記述する。 すなわち、実際に実行されるタスクを書く。 |
C:\temp\fromの下のaaa,bbbというディレクトリーを順番にコピーする例。
<?xml version="1.0" encoding="Shift_JIS"?>
<project name="antcall_sample" default="copy_by_macro" basedir="." >
<macrodef name="copy.mac">
<attribute name="dir" />
<sequential>
<echo message="@{dir}" />
<copy todir="C:\temp\to\@{dir}" preservelastmodified="true">
<fileset dir="C:\temp\from\@{dir}" />
</copy>
</sequential>
</macrodef>
<target name="copy_by_macro">
<copy.mac dir="aaa" />
<copy.mac dir="bbb" />
</target>
</project>
別ファイル(build.xml)のターゲットを呼び出すコアタスク。[2010-02-13]
(org.apache.tools.ant.taskdefs.Ant extends Task)
| 属性 | 説明 |
|---|---|
| antfile | 呼び出すbuild.xmlファイルのパス。 |
| target | 呼び出すターゲットの名前。 |
| dir | 呼び出されるbuild.xmlのbasedir。 inheritAllがtrue(デフォルト)の場合、デフォルトは呼び出したbuild.xmlのカレントディレクトリー。 |
| useNativeBasedir | デフォルトはfalse。 trueにすると、同じbasedirを使用するようになる。(Ant1.8以降) |
| inheritAll | true(デフォルト)の場合、全てのプロパティーが引き継がれる。 |
別ファイルを呼び出すbuild.xml(bin/build.xml):
<?xml version="1.0" encoding="Shift_JIS"?>
<project name="call sample" default="call" basedir=".">
<property name="build.xml" location="../other/build.xml" />
<target name="call">
<ant antfile="${build.xml}" target="make_jar" />
</target>
</project>
呼び出されるbuild.xml(other/build.xml):
<?xml version="1.0" encoding="Shift_JIS"?>
<project name="jar" default="make_jar" basedir=".">
<property name="classes" location="../classes" />
<target name="make_jar">
<jar jarfile="sample.jar">
<fileset dir="${classes}" includes="**/*.class" />
</jar>
</target>
</project>
この例の場合、呼び出されるbuild.xmlでは、sample.jarをカレントディレクトリーに作るよう記述されている。
この場合、呼び出し元のbuild.xmlのカレントディレクトリーにsample.jarが作られる。