Устранение неполадок "не удалось создать задачу или ввести foreach" при использовании <foreach>

Я пытаюсь использовать цикл foreach в Ant script, но я получаю сообщение: Проблема: не удалось создать задачу или тип foreach Причина: Имя undefined.

Я не понимаю, почему это не работает. Это не сторонняя библиотека. Это стандартная задача, которая будет частью последней версии Ant (1.8).

<target name="parse">
  <echo message="The first five letters of the alphabet are:"/>

  <foreach param="instance" list="a,b,c,d,e">

  </foreach>
</target>

Ответы

Ответ 1

Это стандартная задача, которая была бы часть последней версии Ant(1.8).

Нет, нет. По крайней мере, я не могу найти его в списке основных и дополнительных задач в ant manual. Он, кажется, является частью ant -contrib project и, следовательно, должен быть установлен отдельно.

Ответ 2

Вы когда-нибудь считали <script>? в этом теге вы можете использовать какой-то известный script язык, такой как javascript и python. они также могут взаимодействовать с объектом Project, Task... Object Ant, что означает, что вы можете установить/получить свойства и даже выполнить другую задачу. посмотрите на этот пример, который исходит из книги "Развитие Java с помощью ant"

    <project name="script_example" default="test-random">
      <description>
        Use a script task to generate a random number, then
        print it
      </description>
      <target name="random">
        <script language="javascript"><![CDATA[
          //NB: an unqualified Math is the JavaScript object
          var r=java.lang.Math.random();
          var num = Math.round(r*10);
          project.setNewProperty("random", num);
          self.log("Generated random number " + num, project.MSG_DEBUG);
        ]]>
        </script>
      </target>
      <target name="test-random" depends="random">
        <echo>Random number is ${random}</echo>
      </target>
    </project>

Ответ 3

Я не могу найти задачу foreach в руководстве Ant 1.8 - где это? Я знаю только задачу из ant -contrib, и для этого требуется указать атрибут target: http://ant-contrib.sourceforge.net/tasks/tasks/foreach.html

Ответ 4

У меня была такая же проблема в eclipse с различными версиями ant.

Добавьте это в свой код БЕЗ добавления параметров в eclipse (не указывайте путь к классам):

<taskdef resource="net/sf/antcontrib/antcontrib.properties" classpath="/path/to/ant-contrib/ant-contrib-1.0b3.jar"/>

Ответ 5

Вы не определили цель для вызова:

<foreach param="instance" list="a,b,c,d,e" target="processListItem" />

в качестве альтернативы:

<for param="instance" list="a,b,c,d,e" >
  <sequential>
    <!-- Do Something with @{instance} -->
  </sequential>
</for>