Apache Ant 1.6 以降
事前定義では、一部の属性または要素が事前設定された現在の定義に基づいて、新しい定義を生成します。
いずれかの属性またはネストされたテキストのプロパティの解決は、定義が使用されるときに行われ、事前定義の定義時ではありません。
| 属性 | 説明 | 必須 |
|---|---|---|
| name | 新しい定義の名前 | はい |
| uri | この定義が属する URI | いいえ |
<presetdef> タスクは、1 つのネストされた要素をパラメーターとして受け取ります。このネストされた要素は、他のどのタイプやタスクでもかまいません。事前設定が必要な属性や要素は、ここに配置されます。
次のフラグメントでは、debug、deprecation、srcdir、および destdir 属性が設定された javac タスクが定義されています。また、生成されたディレクトリからのソースファイルに src 要素があります。
<presetdef name="my.javac">
<javac debug="${debug}" deprecation="${deprecation}"
srcdir="${src.dir}" destdir="${classes.dir}">
<src path="${gen.dir}"/>
</javac>
</presetdef>
これは通常の javac タスクとして使用できます。たとえば
<my.javac/>
事前タスクで指定された属性は、オーバーライドすることができます。つまり、それらはオプションの属性と見なすことができます。たとえば
<my.javac srcdir="${test.src}" deprecation="no"/>
Antlib に presetdef 定義を配置できます。たとえば、JAR ファイル antgoodies.jar に antlib.xml が次のように含まれているとします。
<antlib>
<taskdef resource="com/acme/antgoodies/tasks.properties"/>
<!-- Implement the common use of the javac command -->
<presetdef name="javac">
<javac deprecation="${deprecation}" debug="${debug}"
srcdir="src" destdir="classes"/>
</presetdef>
</antlib>
これをビルドファイルで使用するには、次のようにします。
<project default="example" xmlns:antgoodies="antlib:com.acme.antgoodies">
<target name="example">
<!-- Compile source -->
<antgoodies:javac srcdir="src/main"/>
<!-- Compile test code -->
<antgoodies:javac srcdir="src/test"/>
</target>
</project>
定義が使用されるときのプロパティの評価の例を次に示します。
<target name="defineandcall">
<presetdef name="showmessage">
<echo>message is '${message}'</echo>
</presetdef>
<showmessage/>
<property name="message" value="Message 1"/>
<showmessage/>
<antcall target="called">
<param name="message" value="Message 2"/>
</antcall>
</target>
<target name="called">
<showmessage/>
</target>
ant defineandcall コマンドの結果は次のとおりです。
defineandcall:
[showmessage] message is '${message}'
[showmessage] message is 'Message 1'
called:
[showmessage] message is 'Message 2'
定義が 作成 されるときにプロパティを評価するためのトリックを使用できます。これは、<ant ... inheritall="false"> で実行される子ビルドで一部のプロパティが使用可能にならないと予想される場合に役立ちます。
<macrodef name="showmessage-presetdef">
<attribute name="messageval"/>
<presetdef name="showmessage">
<echo>message is '@{messageval}'</echo>
</presetdef>
</macrodef>
<showmessage-presetdef messageval="${message}"/>