На основании ваших комментариев, возможно, это поможет.
Вы можете определить цель, которая устанавливает свойство widget.base
и, в свою очередь, вызывает другую цель, имя которой передается в качестве параметра. Значение widget.base
будет пересчитываться при каждом вызове оболочки.
В приведенном ниже примере устанавливаются две вложенные цели, первая вызывает макроопределение, как в вашем вопросе. Второй просто вызывает задачи в цели напрямую. Основная цель вызывает каждого пару раз, чтобы проверить замену.
<property name="platform" value="foo" />
<property name="resolution" value="bar" />
<property name="widget.name" value="bibble" />
<property name="build.dir" value="boo" />
<property name="build.timestamp" value ="1234"/>
<!--sets the property on each call then calls the target with the passed name -->
<target name="wrapper">
<property name="widget.base" value="${build.dir}/widget/${platform}/${resolution}/${widget.name}" />
<antcall target="${nestedTarget}"/>
</target>
<target name="nestedTarget1">
<setBuildstamp widgetBase="${widget.base}" buildTimestamp="${build.timestamp}"/>
</target>
<target name="nestedTarget2">
<echo>"different/${widget.base}/Contents/Javascript/views/sidebar/DevSettingsView.js"
token="%%%BUILD_TIMESTAMP%%%" value="${build.timestamp}"</echo>
</target>
<macrodef name="setBuildstamp">
<attribute name="widgetBase" />
<attribute name="buildTimestamp" />
<sequential>
<echo>"@{widgetBase}/Contents/Javascript/views/sidebar/DevSettingsView.js"
token="%%%BUILD_TIMESTAMP%%%" value="@{buildTimestamp}"</echo>
</sequential>
</macrodef>
<target name="test">
<antcall target="wrapper">
<param name="platform" value="${platform}"/>
<param name="resolution" value="${resolution}"/>
<param name="nestedTarget" value="nestedTarget1"/>
</antcall>
<antcall target="wrapper">
<param name="platform" value="starsky"/>
<param name="resolution" value="hutch"/>
<param name="nestedTarget" value="nestedTarget1"/>
</antcall>
<antcall target="wrapper">
<param name="platform" value="fizz"/>
<param name="resolution" value="buzz"/>
<param name="nestedTarget" value="nestedTarget2"/>
</antcall>
<antcall target="wrapper">
<param name="platform" value="jim"/>
<param name="resolution" value="joe"/>
<param name="nestedTarget" value="nestedTarget2"/>
</antcall>
</target>
Результат выполнения этого скрипта:
test:
wrapper:
nestedTarget1:
[echo] "boo/widget/foo/bar/bibble/Contents/Javascript/views/sidebar/DevSettingsView.js"
[echo] token="%%%BUILD_TIMESTAMP%%%" value="1234"
wrapper:
nestedTarget1:
[echo] "boo/widget/starsky/hutch/bibble/Contents/Javascript/views/sidebar/DevSettingsView.js"
[echo] token="%%%BUILD_TIMESTAMP%%%" value="1234"
wrapper:
nestedTarget2:
[echo] "different/boo/widget/fizz/buzz/bibble/Contents/Javascript/views/sidebar/DevSettingsView.js"
[echo] token="%%%BUILD_TIMESTAMP%%%" value="1234"
wrapper:
nestedTarget2:
[echo] "different/boo/widget/jim/joe/bibble/Contents/Javascript/views/sidebar/DevSettingsView.js"
[echo] token="%%%BUILD_TIMESTAMP%%%" value="1234"
BUILD SUCCESSFUL