使用<foreach> </foreach>时,疑难解答“无法创建任务或输入foreach”

时间:2010-04-09 16:01:09

标签: java ant

我正在尝试在Ant脚本中使用foreach循环,但我收到消息:问题:无法创建任务或键入foreach原因:名称未定义。

我不明白为什么这不起作用。它不是第三方图书馆。这是一项标准任务,将成为最新版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>

5 个答案:

答案 0 :(得分:20)

  

这是一项标准任务   Ant的最新版本的一部分   (1.8)。

不,不是。至少我在ant manual的核心和可选任务列表中找不到它。 它似乎是ant-contrib project的一部分,因此需要单独安装。

答案 1 :(得分:4)

你曾经考虑过<script>吗?在这个标签中你可以使用一些着名的脚本语言,如javascript和python。他们还可以与Project,Task ... Ant对象进行交互,这意味着您可以设置/获取属性甚至执行其他任务。看看这个来自“使用ant的java开发”一书的例子

    <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>

答案 2 :(得分:3)

我在Ant 1.8手册中找不到foreach任务 - 它在哪里?我只知道ant-contrib的任务,它需要指定'target'属性:http://ant-contrib.sourceforge.net/tasks/tasks/foreach.html

答案 3 :(得分:3)

我在eclipse下遇到了与各种版本的蚂蚁相同的问题。

将此添加到您的代码中,不要在eclipse下添加参数(不要指定任何类路径):

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

答案 4 :(得分:3)

您尚未定义要调用的目标:

<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>