Устранение неполадок "не удалось создать задачу или ввести 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>