Ant

説明

指定されたビルドファイル上で 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 を呼び出す場合、CA で設定された値を参照します。たとえ B もネストされた <property> 要素を使用したとしてもです。

データ型への参照も新しいプロジェクトに渡すことができますが、デフォルトでは渡されません。inheritrefs 属性を true に設定すると、すべての参照がコピーされますが、新しいプロジェクトで定義された参照をオーバーライドすることはありません。

ネストされた <reference> 要素を使用して、呼び出し元のプロジェクトから新しいプロジェクトに参照をコピーし、オプションで別の id でコピーすることもできます。ネストされた要素から取得された参照は、新しいプロジェクトのターゲットの外部で定義された既存の参照をオーバーライドします。ただし、ターゲット内部で定義された参照はオーバーライドしません。

パラメータ

属性 説明 必須
antfile 使用するビルドファイル。dir 属性で指定された相対パスのファイルが予期されます。 いいえ; デフォルトは build.xml
dir 新しい Ant プロジェクトの basedir として使用するディレクトリ(useNativeBasedirtrue に設定されていない場合)。これにより、呼び出されたプロジェクトの basedir 設定がオーバーライドされます。
また、antfile および output 属性の値(存在する場合)を解決するためのディレクトリとしても機能します。
いいえ; デフォルトは現在のプロジェクトの basedir です。ただし、inheritallfalse に設定されている場合はデフォルト値はありません
target 実行する新しい Ant プロジェクトのターゲット。 いいえ; デフォルトは新しいプロジェクトのデフォルトターゲット
output Ant の出力を書き込むファイル名。 dir 属性が設定されている場合はその値に対する相対パス、それ以外の場合は現在のプロジェクトの basedir に対する相対パスとなります。 いいえ
inheritAll true の場合、すべてのプロパティを新しい Ant プロジェクトに渡します。 いいえ; デフォルトは true
inheritRefs true の場合、すべての参照を新しい Ant プロジェクトに渡します。 いいえ; デフォルトは false
useNativeBasedir true に設定すると、子ビルドはコマンドラインから実行された場合と同じ basedir を使用します(つまり、子ビルドのビルドファイルを見たときに予想される basedir)。Ant 1.8.0以降 いいえ; デフォルトは false

ネストされた要素として指定されるパラメータ

property

property タスクの説明を参照してください。
これらのプロパティは、コマンドラインで定義するプロパティと同等になります。これらは特別なプロパティであり、inheritAllfalse に設定された追加の <*ant*> タスクを経由しても常に渡されます(上記参照)。
refid 属性は、新しいプロジェクトではなく、呼び出し元のプロジェクトの参照を指していることに注意してください。

reference

新しいプロジェクトにコピーされる参照を選択するために使用されます。オプションで id を変更することもできます。

属性 説明 必須
refid 呼び出し元のプロジェクトの参照の id はい
torefid 新しいプロジェクトの参照の id いいえ; デフォルトは refid の値

propertyset

Ant 1.6以降.

propertyset を使用して、新しいプロジェクトにコピーするプロパティのセットを指定できます。

target

Ant 1.6.3以降.

target 属性を使用する代わりに、ネストされた <target> 要素を使用して複数のターゲットを指定できます。これらは、指定された順序で、指定されたターゲットが依存関係である単一のターゲットで Ant が呼び出されたかのように実行されます。

属性 説明 必須
name 呼び出されるターゲットの名前。 はい

新しいプロジェクトの Basedir

useNativeBasedir を true に設定した場合、新しいプロジェクトの basedir は、新しいプロジェクトの <project> 要素の basedir 属性(または、basedir 属性がない場合は新しいプロジェクトのディレクトリ)が示すものになります。このタスクの他の属性や、このタスクが <ant> 呼び出しのレベルにどれだけ深くネストされているかに関係なく、そうなります。

useNativeBasedir を設定していないか、false に設定した場合は、次のルールが適用されます

新しいプロジェクトの basedir 値は、dirinheritall の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"/>

subbuildpath1 の定義はオーバーライドされませんが、親の path2 の定義は subbuild で利用可能になります。一方、

<ant antfile="subbuild.xml"/>

同様に

<ant antfile="subbuild.xml" inheritrefs="false"/>

path1 をオーバーライドすることも、path2 をコピーすることもありません。一方で、

<ant antfile="subbuild.xml" inheritrefs="false">
  <reference refid="path1"/>
</ant>

subbuildpath1 の定義をオーバーライドし、

<ant antfile="subbuild.xml" inheritrefs="false">
  <reference refid="path1" torefid="path2"/>
</ant>

親の path1 の定義を id path2 を使用して新しいプロジェクトにコピーします。