конвертировать путь муравья без присваивания неизменного свойства - PullRequest
0 голосов
/ 21 августа 2010

У меня есть ситуация, когда у меня есть путь с несколькими сегментами пути, и для каждого сегмента пути мне нужно преобразовать этот сегмент пути (предположительно с использованием картографа), а затем передать исходный сегмент пути И преобразованныйсегмент пути к макросу.

Проблема в том, что мне не понятно, как преобразовать путь, не назначая преобразованный путь неизменному свойству.

Ниже приведен слегка упрощенный файл сборки.

<?xml version="1.0" encoding="ISO-8859-1"?>
<project name="scxml-js" basedir="." default="generate-javascript">
  <taskdef resource="net/sf/antcontrib/antcontrib.properties">
    <classpath>
      <pathelement location="${basedir}/lib/build-java/ant-contrib-0.6.jar" />
    </classpath>
  </taskdef>

  <property name="backends" value="switch,table,state"/>
  <property name="browsers" value="firefox,ie,chrome"/>
  <property name="for-ie" value="is-for-ie,is-not-for-ie"/>

  <path id="scxml-tests-xml">
    <pathelement location="test/kitchen_sink/KitchenSink.xml"/>
    <pathelement location="test/kitchen_sink/KitchenSink_dataModule.xml"/>
    <!-- ... -->
  </path>

  <!-- the macro call java with specific arguments -->
  <macrodef name="compile-with-scxml-js">
    <attribute name="backend"/>
    <attribute name="test-path"/>
    <attribute name="out-path"/>

    <sequential>
      <java classname="org.mozilla.javascript.tools.shell.Main" output="@{out-path}">
        <classpath>
          <pathelement location="lib/java/js.jar"/>
           <!-- ... -->
        </classpath>
        <arg value="${basedir}/runner.js"/>
        <arg value="${basedir}"/>
        <arg value="src/javascript/scxml/cgf/main"/>

        <arg value="--backend=@{backend}"/>
        <arg value="--beautify"/>
        <arg value="--ie"/>
        <arg value="@{test-path}"/>
      </java>
    </sequential>
  </macrodef>

  <!-- run unit and performance tests -->
  <target name="generate-javascript">

    <for list="${for-ie}" param="for-ie">
      <sequential>
        <for list="${backends}" param="backend">
          <sequential>
            <for param="test-path">
              <path refid="scxml-tests-xml"/>
              <sequential>

                <!-- do some manipulation -->
                <pathconvert property="target-test-path">
                  <path path="@{test-path}"/>
                  <chainedmapper>
                    <flattenmapper/>
                    <globmapper from="*.xml" to="build/@{backend}/@{for-ie}/*.js"/>
                  </chainedmapper>
                </pathconvert>

                <dirname property="target-test-path-dir" file="${target-test-path}"/>

                <echo>${target-test-path}, ${target-test-path-dir}</echo> 

                <!-- execute some tasks, call a macro -->

                <mkdir dir="${target-test-path-dir}"/>

                <compile-with-scxml-js-ie
                  test-path="@{test-path}"
                  backend="@{backend}"
                  out-path="${target-test-path}"/>
              </sequential>
            </for>
          </sequential>
        </for>
      </sequential>
    </for>
  </target>

</project>

Поскольку target-test-path и target-test-path-dir будут назначены только один раз, это будет многократно повторять следующее: [echo] build / switch / is-for-ie / KitchenSink.js, / home/ jacob / workspace / gsoc2010 / git-scxml-js / scxml-js / build / switch / is-for-ie

Буду признателен за любые рекомендации, которые может предложить каждый.

1 Ответ

2 голосов
/ 21 августа 2010

Вы можете использовать значения параметров для построения имен свойств, например:

<!-- do some manipulation -->
<pathconvert property="@{backend}.@{for-ie}.target-test-path">
  <path path="@{test-path}"/>
  <chainedmapper>
    <flattenmapper/>
    <globmapper from="*.xml" to="build/@{backend}/@{for-ie}/*.js"/>
  </chainedmapper>
</pathconvert>

<dirname
  property="@{backend}.@{for-ie}.target-test-path-dir"
  file="${@{backend}.@{for-ie}.target-test-path}"
/>

<echo>${@{backend}.@{for-ie}.target-test-path}, ${@{backend}.@{for-ie}.target-test-path-dir}</echo> 

<!-- execute some tasks, call a macro -->

<mkdir dir="${@{backend}.@{for-ie}.target-test-path-dir}"/>

<compile-with-scxml-js-ie
  test-path="@{test-path}"
  backend="@{backend}"
  out-path="${@{backend}.@{for-ie}.target-test-path}"
/>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...