Macrodef и "локальные свойства" - PullRequest
6 голосов
/ 28 ноября 2011

Я пытаюсь переместить файл (указанный шаблоном) в указанное место в макросе Ant:

<macrodef name="extract">
    <attribute name="package"/> 
    <sequential>

        <!-- the path will contain the unique file in extracted regardless of the name -->
        <path id="source_refid">
            <dirset dir="${dep}/lib/@{package}/extracted/">
                <include name="@{package}-*"/>
            </dirset>
        </path>

        <!-- this is not working: properties are immutable -->
        <property name="source_name" refid="source_refid"/>

        <move
            file="${source_name}"
            tofile="${dep}/@{package}/"
            overwrite="true"
        />

    </sequential>
</macrodef>

Это будет работать только один раз, поскольку ${source_name} является неизменным.

Можно было бы использовать переменную задачу, но я не нашел способа назначить refid для var.

Есть ли способ иметь что-то похожее на локальную переменную в макросе? Или (проблема XY) есть лучший способ решить мою проблему?

1 Ответ

9 голосов
/ 28 ноября 2011

Начиная с Ant 1.8 вы можете использовать для этого задачу local . Например:

<local name="source_name"/>
<property name="source_name" refid="source_refid"/>

Ваш пример как раз для таких вещей local для!

...