タスクの一部をサブルーチンのようにして呼び出すことが出来る。
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が作られる。