我的 Ant 有一个奇怪的问题。它的版本是1.7.1。

我正在尝试做下一件事并得到错误。

<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.对不起,错了。看一个简单的。

最佳答案

“原因:名称未定义”表示该任务未安装在您的ant环境中。<foreach>不是普通 Ant 的任务,但需要可用于 Ant 的 Ant 插件antcontrib
安装antcontrib之后,您应该使用<taskdef resource="net/sf/antcontrib/antlib.xml"/>激活所有antcontrib任务。
GOTCHA =>不要使用http://ant-contrib.sourceforge.net/上提到的<taskdef resource="net/sf/antcontrib/antcontrib.properties"/>,因为net/sf/antcontrib/antcontrib.properties仅包含Ant 1.6.x之前的ant版本任务。

09-07 15:11