import
ファイルを次のように使用してマクロを使用できます。
<import file="macrodefs.xml" />
<do-cool-stuff message="Hello, World!" />
マクロ定義では、@{curlybrackets}
マクロ属性を参照するときに使用する必要があることに注意してください。
<sequential>
<echo message="@{message}" />
</sequential>
macrodef
Antタスクドキュメントの最後にいくつかの例があります。
もっと
あなたがやろうとしていることは、Ant によって十分にサポートされていません。およびタスクant
でantcall
は、「呼び出し先」が呼び出し元に直接影響を与えることはできません。呼び出されたタスクにファイルを書き込んでから、それらを呼び出し元にロードできます。しかし、ご覧のとおり、前処理タスクimport
とinclude
ターゲット内から呼び出すことはできません。ant/antcall タスクでは、マクロではなく、補助ビルドでのみターゲットを実行できます。
1 つの回避策 (これはあなたが言及したものと似ているかもしれませんが、すべての実際の作業を最上位ビルドに入れることができます) は、macrodefs.xml の最上位インポートを含む内部ビルドファイルを持つことです。
次のようなもの。macrodefs.xml ファイルは以前と同じです。(ただし、インポートされたファイル (マクロ定義を含む) は完全な Ant プロジェクト ファイルである必要があるため、プロジェクト要素を含める必要があることに注意してください。)
build.xml:
<target name="build">
<!-- cvs actions -->
<ant antfile="inner-build.xml" target="target-runner">
<property name="target" value="top-target" />
</ant>
</target>
<!-- this target will fail unless invoked from the inner build -->
<target name="top-target">
<do-cool-stuff message="Hello, World!" />
</target>
内部ビルド.xml:
<project>
<import file="macrodefs.xml" />
<target name="target-runner">
<ant antfile="build.xml" target="${target}" />
</target>
</project>
効果的にあなたはやっているでしょう
build.xml --> inner-build.xml --> build.xml (again)
(cvs) (import macros) (use macros)
複数のマクロ定義ファイルをインポートしたい場合など、内部ビルドファイルはメインビルドによってオンザフライで生成される可能性がありますが、おそらく扱いにくくなっています。