Apache Ant 1.6 以降
定義されているすべてのサブビルドに対して、指定されたターゲットを呼び出します。これは、プロジェクトを一括実行するための Ant の拡張機能です。 このタスクは、自身が属するビルドファイルを呼び出す場合、target
の外側で使用してはいけません。
subant
は内部で ant
を使用するため、ant
のマニュアルページに記載されている多くの事項がここでも適用されます。
subant
は、ディレクトリセットと併用して、異なるディレクトリからビルドを実行できます。2 つの異なるオプションが提供されています。
subant
タスクはベースディレクトリを設定しません。各ビルドファイルでベースディレクトリを指定できるためです。属性 | 説明 | タイプ | 必須 |
---|---|---|---|
antfile | ディレクトリと組み合わせて使用するビルドファイル名。 | 文字列 | いいえ; デフォルトは「build.xml」、genericantfile が設定されている場合は無視されます |
buildpath | サブプロジェクトを見つけるために使用されるビルドパスを設定します。 | パス | いいえ |
buildpathref | 参照によって使用するビルドパス。 | 参照 | |
failonerror | エラー時にビルド例外で失敗するか、続行するかを設定します。 | ブール値 | |
genericantfile | ディレクトリと組み合わせて使用するビルドファイルのパス。 異なる basedir で同じビルドファイルを実行するには、genericantfile を使用します。 この属性が設定されている場合、antfile は無視されます。 |
ファイル | |
inheritall | <ant> の inheritall 属性に対応しますが、このタスクではデフォルトは「false」です。 |
ブール値 | |
inheritrefs | <ant> の inheritrefs 属性に対応します。 |
ブール値 | |
output | <ant> の output 属性に対応します。 |
文字列 | |
target | 文字列 | ||
verbose | 各サブビルドパスの開始/終了を示すログメッセージを有効/無効にします。 | ブール値 | いいえ; デフォルトは「false」 |
これには、Ant 1.7 よりも前にサポートされていたネストされたリソースコレクションである <fileset>
、<dirset>
、および <filelist>
が含まれます。
ディレクトリは特定の順序でビルドパスに追加されるわけではないため、順序が重要な場合は、代わりにファイルリストを使用する必要があることに注意してください。
暗黙的なビルドパスに順序付けられたファイルリストを追加します。
ファイルセットやディレクトリセットとは異なり、ファイルリストは存在しないファイルまたはディレクトリを参照できることに注意してください。
暗黙的なビルドパスにファイルセットを追加します。
ディレクトリは特定の順序でビルドパスに追加されるわけではないため、順序が重要な場合は、代わりにファイルリストを使用する必要があることに注意してください。
<ant>
のネストされた <property>
要素に対応します。
複数のネストされた <property>
要素が同じ名前のプロパティを設定する場合、最後に宣言されたものが優先されます。これは、ビルドファイルの <property>
タスクの動作とは異なりますが、下位互換性のためにこのように動作します。
<ant>
のネストされた <propertyset>
要素に対応します。
ネストされたビルドパスを作成し、暗黙的なビルドパスに追加します。
ネストされた <buildpathelement>
を作成し、暗黙的なビルドパスに追加します。
Ant 1.7 以降.
target 属性を使用する代わりに、ネストされた <target>
要素を使用して複数のターゲットを指定できます。これらは、Ant が指定された順序で、依存関係が指定されたターゲットである単一のターゲットで呼び出されたかのように実行されます。
属性 | 説明 | 必須 |
---|---|---|
name | 呼び出すターゲットの名前。 | はい |
このスニペットビルドファイルは、プロジェクトディレクトリの各サブディレクトリで ant を実行します。そこには、build.xml というファイルがあります。プロパティ build.dir
は、subant
によって呼び出される Ant プロジェクトで値「subant1.build」を持ちます。
<project name="subant" default="subant1"> <property name="build.dir" value="subant.build"/> <target name="subant1"> <subant target=""> <property name="build.dir" value="subant1.build"/> <property name="not.overloaded" value="not.overloaded"/> <fileset dir="." includes="*/build.xml"/> </subant> </target> </project>
このスニペットビルドファイルは、プロジェクトディレクトリの各サブディレクトリで ant を実行します。そこには、build.xml というファイルがあります。「foo」で始まる名前のすべてのプロパティが渡され、それらの名前は代わりに「bar」で始まるように変更されます。
<subant target=""> <propertyset> <propertyref prefix="toplevel"/> <mapper type="glob" from="foo*" to="bar*"/> </propertyset> <fileset dir="." includes="*/build.xml"/> </subant>
プロジェクトディレクトリのサブディレクトリが projects1、projects2、projects3 と呼ばれていると仮定すると、このスニペットは /opt/project/build1.xml の「compile」ターゲットを実行し、basedir を「projects1」、「projects2」、「projects3」に設定します。
<subant target="compile" genericantfile="/opt/project/build1.xml"> <dirset dir="." includes="projects*"/> </subant>
もう少し複雑な、しかし便利なシナリオです。次のようなディレクトリ構造があるとします。
root | common.xml | build.xml | +-- modules +-- modA | +-- src +-- modB +-- src common.xml:
<project> <property name="src.dir" value="src"/> <property name="build.dir" value="build"/> <property name="classes.dir" value="${build.dir}/classes"/> <target name="compile"> <mkdir dir="${classes.dir}"/> <javac srcdir="${src.dir}" destdir="${classes.dir}"/> </target> <!-- more targets --> </project> build.xml:
<project> <macrodef name="iterate"> <attribute name="target"/> <sequential> <subant target="@{target}"> <fileset dir="modules" includes="*/build.xml"/> </subant> </sequential> </macrodef> <target name="compile"> <iterate target="compile"/> </target> <!-- more targets --> </project> modules/modA/build.xml:
<project name="modA"> <import file="../../common.xml"/> </project>
これにより、モジュール内のビルドファイルが非常に小さく、ビルドファイル(common.xml)の保守が容易になり、プロジェクト構造が明確になります。さらに、ルートビルドファイルは、すべてのモジュールでビルド全体を実行できます。
このタスクは、各サブプロジェクトの「クリーンビルド」を実行します。
<subant failonerror="false"> <fileset dir="." includes="**/build.xml" excludes="build.xml"/> <target name="clean"/> <target name="build"/> </subant>
ヒント:ビルドファイルはプレーン XML であるため、XSLT 変換を使用して共通ビルドファイルからマスタービルドファイルを生成できます。
<xslt in="common.xml" out="master.xml" style="${ant.home}/etc/common2master.xsl"/>