Рассмотрим следующую выдержку из файла ant build.xml:
<presetdef name="echo1def">
<echo message="prop: ${foo}" />
</presetdef>
<presetdef name="echo2def">
<sequential>
<echo message="prop: ${foo}" />
</sequential>
</presetdef>
<target name="echotarget1">
<property name="foo" value="bar" />
<echo1def/>
</target>
<target name="echotarget2">
<property name="foo" value="bar" />
<echo2def/>
</target>
<target name="echo1">
<antcall target="echotarget1" />
</target>
<target name="echo2">
<antcall target="echotarget2" />
</target>
При вызове любого из {echotarget1, echotarget2, echo1} ожидаемый результат будет равен prop: bar
.Однако при вызове echo2 выдается prop: ${foo}
.
Почему echo2def
не может разрешить свойство ${foo}
?Это определено непосредственно ранее, в том же проекте (то есть, даже не на другой стороне antcall).Вызов echo1, который делает то же самое, но presetdef не заключен в <sequential>
, не имеет проблем.
Наконец,
<target name="echo3">
<property name="foo" value="baz" />
<antcall target="echotarget2" />
</target>
сообщает prop: baz
- поэтому свойство изантиклинирующий проект можно увидеть , даже если он определен после предустановки.