Свойство Ant, содержащее параметры Macrodef - PullRequest
2 голосов
/ 08 октября 2009

Есть ли способ поместить значение в свойство, которое содержит строку параметра macrodef?

Например, в следующем макросе я хотел бы добавить к свойству $ {build.dir} / widget / @ {platformcasts/@ndomresolution‹/$‹widget. как это используется в нескольких макросах.

<macrodef name="setBuildstamp">
    <attribute name="platform" />
    <attribute name="resolution" />
    <sequential>
      <replace file="${build.dir}/widget/@{platform}/@{resolution}/${widget.name}/Contents/Javascript/views/sidebar/DevSettingsView.js" token="%%%BUILD_TIMESTAMP%%%" value="${build.timestamp}" />
    </sequential>
</macrodef>

станет

<property name="widget.base" value"${build.dir}/widget/@{platform}/@{resolution}/${widget.name}" />

<macrodef name="setBuildstamp">
    <attribute name="platform" />
    <attribute name="resolution" />
    <sequential>
         <replace file="${widget.base}/Contents/Javascript/views/sidebar/DevSettingsView.js" token="%%%BUILD_TIMESTAMP%%%" value="${build.timestamp}" />
    </sequential>
</macrodef>

Ответы [ 2 ]

3 голосов
/ 09 сентября 2010

В ant 1.8 у вас есть задание local , которое было разработано специально для этого.

1 голос
/ 08 октября 2009

На основании ваших комментариев, возможно, это поможет.

Вы можете определить цель, которая устанавливает свойство 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...