Macrodef и "локальные свойства"
Я пытаюсь переместить файл (указанный шаблоном) в указанное место в макросе 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
,
Есть ли способ иметь что-то похожее на локальную переменную в macrodef? Или (проблема XY) есть лучший способ решить мою проблему?
1 ответ
Решение
Начиная с Ant 1.8 вы можете использовать local
Задача для этого. Например:
<local name="source_name"/>
<property name="source_name" refid="source_refid"/>
Ваш пример - это просто вещь local
для!