よく忘れるのでメモ。
#基本
<?xml version="1.0" encoding="Shift_JIS"?>
<project basedir="." default="execute">
<target name="execute">
<my-macro />
</target>
<macrodef name="my-macro">
<sequential>
<echo message="Hello macrodef!!" />
</sequential>
</macrodef>
</project>
実行結果
execute:
[echo] Hello macrodef!!
#属性を定義する
<?xml version="1.0" encoding="Shift_JIS"?>
<project basedir="." default="execute">
<target name="execute">
<my-macro hoge="属性" />
</target>
<macrodef name="my-macro">
<attribute name="hoge" />
<sequential>
<echo message="hoge = @{hoge}" />
</sequential>
</macrodef>
</project>
execute:
[echo] hoge = 属性
後述の「デフォルト値」を定義しないかぎり、属性は必須になる。
##属性のデフォルト値を定義する
<?xml version="1.0" encoding="Shift_JIS"?>
<project basedir="." default="execute">
<target name="execute">
<my-macro />
</target>
<macrodef name="my-macro">
<attribute name="hoge" default="デフォルト値" />
<sequential>
<echo message="hoge = @{hoge}" />
</sequential>
</macrodef>
</project>
実行結果
execute:
[echo] hoge = デフォルト値
#内部要素を定義する
<?xml version="1.0" encoding="Shift_JIS"?>
<project basedir="." default="execute">
<target name="execute">
<my-macro>
<hoge>
<echo message="内部要素" />
</hoge>
</my-macro>
</target>
<macrodef name="my-macro">
<element name="hoge" />
<sequential>
<hoge />
</sequential>
</macrodef>
</project>
実行結果
execute:
[echo] 内部要素
内部要素は、デフォルトは必須。
##内部要素を任意入力にする
<?xml version="1.0" encoding="Shift_JIS"?>
<project basedir="." default="execute">
<target name="execute">
<my-macro />
</target>
<macrodef name="my-macro">
<element name="hoge" optional="true" />
<sequential>
<hoge />
</sequential>
</macrodef>
</project>
実行結果
execute:
#内部テキストを定義する
<?xml version="1.0" encoding="Shift_JIS"?>
<project basedir="." default="execute">
<target name="execute">
<my-macro>
HOGEE
</my-macro>
</target>
<macrodef name="my-macro">
<text name="hoge" />
<sequential>
<echo message="@{hoge}" />
</sequential>
</macrodef>
</project>
実行結果
execute:
[echo]
[echo] HOGEE
[echo]
##内部テキストを任意入力にする
<?xml version="1.0" encoding="Shift_JIS"?>
<project basedir="." default="execute">
<target name="execute">
<my-macro />
</target>
<macrodef name="my-macro">
<text name="hoge" optional="true" />
<sequential>
<echo message="@{hoge}" />
</sequential>
</macrodef>
</project>
実行結果
execute:
[echo]
##内部テキストの前後をトリムする
<?xml version="1.0" encoding="Shift_JIS"?>
<project basedir="." default="execute">
<target name="execute">
<my-macro>
HOGEE
</my-macro>
</target>
<macrodef name="my-macro">
<text name="hoge" trim="true" />
<sequential>
<echo message="@{hoge}" />
</sequential>
</macrodef>
</project>
実行結果
execute:
[echo] HOGEE
#参考