2013-03-11 36 views
3

我对蚂蚁有一个奇怪的问题。它的版本是1.7.1。Ant foreach:原因:名称未定义。但一切似乎没有问题

我试图做下一件事,并得到错误。

<target name="execute-all-buildfiles"> 
    <foreach param="buildfile-path" target="execute-buildfile"> 
     <path> 
      <dirset dir="${path.to.server}/share/source"/> 
     </path> 
    </foreach> 
</target> 

<target name="execute-buildfile"> 
    <echo message="" /> 
    <echo message="" /> 
    <echo message="" /> 
    <echo message="__________ Building cartridge ${buildfile-path} ___________" /> 
    <echo message="" /> 
    <echo message="" /> 
    <echo message="" /> 
    <java 
      jvm="${path.to.server}/engine/jdk/bin/java" 
      classname="org.apache.tools.ant.launch.Launcher" 
      fork="true" 
      failonerror="true"> 
     <classpath> 
      <pathelement location="${ant.home}/lib/ant-launcher.jar"/> 
     </classpath> 
     <arg value="-f" /> 
     <arg value="${buildfile-path}/build/build.xml" /> 
     <arg value="-Dis.home=${path.to.server}" /> 
    </java> 
</target> 

我已经尝试了较不复杂的foreach版本,但它不工作。请帮帮我。

<target name="run">  
    <foreach target="loop" param="loop.param"> 
     <path> 
      <dirset dir="${path.to.server}/share/source"/> 
     </path> 
    </foreach> 
</target> 
<target name="loop">  
    <echo message="${loop.param}"/> 
    <basename property="dir.name" file="${loop.param}"/> 
    <echo message="${dir.name}"/> 
</target> 

P.S.对错误抱歉。看看一个简单的。

+0

丢失,不要使用<taskdef resource="net/sf/antcontrib/antcontrib.properties"/>http://ant-contrib.sourceforge.net/提到“<”目标之前是一个错字发布问题? – 2013-03-11 17:28:27

+0

你可以发布“简单版本的foreach”作为准 - [SSCCE](http://www.sscce.org)吗? – wchargin 2013-03-11 17:32:57

+0

另外,你不一定要有'list = a,b,c,d'属性或嵌套'fileset'吗?我只看到一个'dirset',也许它不喜欢那个。 – wchargin 2013-03-11 17:34:13

回答

11

“原因:名称未定义”表示该任务未安装在您的蚂蚁环境中。
<foreach>不是香草蚂蚁的任务,但需要蚂蚁插件antcontrib可用于蚂蚁。
安装antcontrib后,您应该使用<taskdef resource="net/sf/antcontrib/antlib.xml"/>来激活所有的antcontrib任务。
GOTCHA =>净/平方英尺/ antcontrib/antcontrib.properties包含蚂蚁版本只有任务的Ant 1.6.x版之前