Необычное поведение муравья с presetdef и antcall - PullRequest
1 голос
/ 08 февраля 2012

Рассмотрим следующую выдержку из файла 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 - поэтому свойство изантиклинирующий проект можно увидеть , даже если он определен после предустановки.

1 Ответ

0 голосов
/ 09 февраля 2012

Просто избавьтесь от <sequential> в presetdef echo2def, что означает:

<presetdef name="echo2def">
 <echo message="prop: ${foo}" />
</presetdef>

и все будет работать так, как ожидается.
Это потому, что области свойств существуют в различном "блоке" Apache Ant"Уровни, включая последовательные, вот как работает локальная задача (новая в Ant 1.8.0).

antcall открывает новую область проекта, без antcall - означает вызов этих целей echotarget1и echotarget2 напрямую - это также работает, разрешая свойство $ {foo}.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...