指定されたビルドファイル上で Apache Ant を実行します。これはサブプロジェクトをビルドするのに使用できます。このタスクは、自身が属するビルドファイルを呼び出す場合、target
の外部で使用してはなりません。
antfile 属性が省略されている場合、指定されたディレクトリ(dir 属性)にある build.xml ファイルが使用されます。
target 属性が指定されていない場合、新しいプロジェクトのデフォルトターゲットが使用されます。
デフォルトでは、現在のプロジェクトのすべてのプロパティが新しいプロジェクトで利用可能になります。または、inheritAll 属性を false
に設定すると、「ユーザー」プロパティ(つまり、コマンドラインで渡されたプロパティ)のみが新しいプロジェクトに渡されます。いずれの場合も、新しいプロジェクトに渡されるプロパティのセットは、新しいプロジェクトで設定されたプロパティをオーバーライドします(property タスクも参照してください)。
ネストされた property
タグを使用すると、古いプロジェクトから新しいプロジェクトにプロパティを設定することもできます。これらのプロパティは常に新しいプロジェクトに渡され、inheritAll の設定に関係なく、そのプロジェクトで作成されたすべてのプロジェクトに渡されます。これにより、サブプロジェクトをパラメータ化できます。
複数のネストされた <property>
要素が同じ名前のプロパティを設定する場合、最後に宣言されたものが優先されます。これは、ビルドファイル内の <property>
タスクの動作とは異なりますが、後方互換性のためにこのように動作します。
コマンドラインで定義されたプロパティは、ネストされた <property>
要素でオーバーライドすることはできません。Ant 1.8.0以降、ネストされた <ant>
タスクの構造についても同様です。ビルドファイル A が、ネストされた <property>
要素でプロパティを設定する <ant>
タスクを介して B を呼び出し、B が <ant>
タスクで C を呼び出す場合、C は A で設定された値を参照します。たとえ B もネストされた <property>
要素を使用したとしてもです。
データ型への参照も新しいプロジェクトに渡すことができますが、デフォルトでは渡されません。inheritrefs 属性を true
に設定すると、すべての参照がコピーされますが、新しいプロジェクトで定義された参照をオーバーライドすることはありません。
ネストされた <reference>
要素を使用して、呼び出し元のプロジェクトから新しいプロジェクトに参照をコピーし、オプションで別の id でコピーすることもできます。ネストされた要素から取得された参照は、新しいプロジェクトのターゲットの外部で定義された既存の参照をオーバーライドします。ただし、ターゲット内部で定義された参照はオーバーライドしません。
属性 | 説明 | 必須 |
---|---|---|
antfile | 使用するビルドファイル。dir 属性で指定された相対パスのファイルが予期されます。 | いいえ; デフォルトは build.xml |
dir | 新しい Ant プロジェクトの basedir として使用するディレクトリ(useNativeBasedir が trueに設定されていない場合)。これにより、呼び出されたプロジェクトの basedir 設定がオーバーライドされます。 また、antfile および output 属性の値(存在する場合)を解決するためのディレクトリとしても機能します。 |
いいえ; デフォルトは現在のプロジェクトの basedir です。ただし、inheritall が falseに設定されている場合はデフォルト値はありません |
target | 実行する新しい Ant プロジェクトのターゲット。 | いいえ; デフォルトは新しいプロジェクトのデフォルトターゲット |
output | Ant の出力を書き込むファイル名。 dir 属性が設定されている場合はその値に対する相対パス、それ以外の場合は現在のプロジェクトの basedir に対する相対パスとなります。 | いいえ |
inheritAll | trueの場合、すべてのプロパティを新しい Ant プロジェクトに渡します。 |
いいえ; デフォルトは true |
inheritRefs | trueの場合、すべての参照を新しい Ant プロジェクトに渡します。 |
いいえ; デフォルトは false |
useNativeBasedir | trueに設定すると、子ビルドはコマンドラインから実行された場合と同じ basedir を使用します(つまり、子ビルドのビルドファイルを見たときに予想される basedir)。Ant 1.8.0以降 |
いいえ; デフォルトは false |
property タスクの説明を参照してください。
これらのプロパティは、コマンドラインで定義するプロパティと同等になります。これらは特別なプロパティであり、inheritAll が false
に設定された追加の <*ant*>
タスクを経由しても常に渡されます(上記参照)。
refid 属性は、新しいプロジェクトではなく、呼び出し元のプロジェクトの参照を指していることに注意してください。
新しいプロジェクトにコピーされる参照を選択するために使用されます。オプションで id を変更することもできます。
属性 | 説明 | 必須 |
---|---|---|
refid | 呼び出し元のプロジェクトの参照の id。 | はい |
torefid | 新しいプロジェクトの参照の id。 | いいえ; デフォルトは refid の値 |
Ant 1.6以降.
propertyset を使用して、新しいプロジェクトにコピーするプロパティのセットを指定できます。
Ant 1.6.3以降.
target 属性を使用する代わりに、ネストされた <target>
要素を使用して複数のターゲットを指定できます。これらは、指定された順序で、指定されたターゲットが依存関係である単一のターゲットで Ant が呼び出されたかのように実行されます。
属性 | 説明 | 必須 |
---|---|---|
name | 呼び出されるターゲットの名前。 | はい |
useNativeBasedir を true に設定した場合、新しいプロジェクトの basedir は、新しいプロジェクトの <project>
要素の basedir 属性(または、basedir 属性がない場合は新しいプロジェクトのディレクトリ)が示すものになります。このタスクの他の属性や、このタスクが <ant>
呼び出しのレベルにどれだけ深くネストされているかに関係なく、そうなります。
useNativeBasedir を設定していないか、false
に設定した場合は、次のルールが適用されます
新しいプロジェクトの basedir 値は、dir と inheritall の2つの属性、および <ant>
タスクの履歴の影響を受けます。現在の動作は紛らわしいことが知られていますが、後方互換性を微妙な方法で損なうことなく変更することはできません。
<ant>
タスクが「トップレベル」のビルドファイルにある場合、つまり、<ant>
タスクを含むプロジェクト自体が、別の <ant>
(または <antcall>
)タスクの一部として「上位」で呼び出されていない場合は、次の表に詳細を示します
dir 属性 | inheritAll 属性 | 新しいプロジェクトの basedir |
---|---|---|
値が指定されている | true |
dir 属性の値 |
値が指定されている | false |
dir 属性の値 |
省略 | true |
呼び出し元のプロジェクトの basedir(<ant> タスクを含むビルドファイルのプロジェクト)。 |
省略 | false |
新しいプロジェクトの <project> 要素の basedir 属性 |
一方、<ant>
タスクがすでに別の呼び出しにネストされている場合、親の呼び出しの設定が basedir 値の結果に影響します。現在のタスクの dir 属性は常に優先されますが、dir 属性が省略されている場合はさらに複雑な状況が発生します
親の dir 属性 | 親の inheritAll 属性 | 現在の inheritAll 属性 | 新しいプロジェクトの basedir |
---|---|---|---|
値が指定されている | 任意 | 任意 | 親の dir 属性の値 |
省略 | true |
true |
親プロジェクトの basedir(現在の <ant> タスクを含むビルドファイルを呼び出したビルドファイルのプロジェクト)。 |
省略 | true |
false |
親プロジェクトの basedir(現在の <ant> タスクを含むビルドファイルを呼び出したビルドファイルのプロジェクト)。 |
省略 | false |
true |
呼び出し元のプロジェクトの basedir(現在の <ant> タスクを含むビルドファイルのプロジェクト)。 |
省略 | false |
false |
新しいプロジェクトの <project> 要素の basedir 属性 |
さらに深いレベルのネストを追加すると、さらに複雑になり、上記の表を再帰的に適用する必要があります。
最上位のビルドの basedir がコマンドラインでプロパティとして指定されている場合(つまり、-Dbasedir=some-value または -propertyfile 引数)、指定された値はさらに高い優先度を持ちます。 dir 属性を指定しない <ant>
タスクの場合、新しいプロジェクトの basedir は、コマンドラインで指定された値になります。タスクがどれだけ深くビルドファイルのレイヤーにネストされていても関係ありません。
<ant>
タスクのネストされた <property>
として basedir が指定されている場合も同様です。より深いレベルで開始されたビルドファイルの basedir は、対応する Ant タスクが明示的に dir 属性を設定しない限り、プロパティ要素の指定された値に設定されます。
これはタスクを使用するさまざまな方法です
<ant antfile="subproject/subbuild.xml" target="compile"/> <ant dir="subproject"/> <ant antfile="subproject/property_based_subbuild.xml"> <property name="param1" value="version 1.x"/> <property file="config/subproject/default.properties"/> </ant> <ant inheritAll="false" antfile="subproject/subbuild.xml"> <property name="output.type" value="html"/> </ant>
これらの行は同じビルドファイルを呼び出します
<ant antfile="sub1/sub2/build.xml"/> <ant antfile="sub2/build.xml" dir="sub1"/> <ant antfile="build.xml" dir="sub1/sub2"/>
呼び出し元のプロジェクトのビルドファイルは、次のような <path>
要素を定義します
<path id="path1"> ... </path> <path id="path2"> ... </path>
呼び出されるビルドファイル(subbuild.xml)も、id path1 を持つ <path>
を定義しますが、path2 は定義されていません。その場合、
<ant antfile="subbuild.xml" inheritrefs="true"/>
subbuild の path1 の定義はオーバーライドされませんが、親の path2 の定義は subbuild で利用可能になります。一方、
<ant antfile="subbuild.xml"/>
同様に
<ant antfile="subbuild.xml" inheritrefs="false"/>
path1 をオーバーライドすることも、path2 をコピーすることもありません。一方で、
<ant antfile="subbuild.xml" inheritrefs="false"> <reference refid="path1"/> </ant>
subbuild の path1 の定義をオーバーライドし、
<ant antfile="subbuild.xml" inheritrefs="false"> <reference refid="path1" torefid="path2"/> </ant>
親の path1 の定義を id path2 を使用して新しいプロジェクトにコピーします。