【问题标题】:"antcall must not be used at the top level" error using Ant-Contrib <foreach>“antcall 不能在顶层使用”错误使用 Ant-Contrib <foreach>
【发布时间】:2015-11-12 07:38:40
【问题描述】:

执行下面的 Ant 脚本时出现以下错误:

antcall不能在顶层使用

我正在使用 Jenkins Active Choices 插件并将参数传递给 Ant 脚本。

<project name="svncheckout" default="checkout" basedir=".">
    <path id="svnant.classpath">
        <pathelement location="/opt/Tomcat/apache-ant-1.9.6/lib/svnClientAdapter.jar"/>
        <pathelement location="/opt/Tomcat/apache-ant-1.9.6/lib/ganymed.jar"/>
        <pathelement location="/opt/Tomcat/apache-ant-1.9.6/lib/jna.jar"/>
        <pathelement location="/opt/Tomcat/apache-ant-1.9.6/lib/svnant.jar"/>
        <pathelement location="/opt/Tomcat/apache-ant-1.9.6/lib/svnjavahl.jar"/>
        <pathelement location="/opt/Tomcat/apache-ant-1.9.6/lib/svnkit.jar"/>
    </path>

    <!-- Load the ant contrib lib -->
    <taskdef resource="net/sf/antcontrib/antlib.xml">
        <classpath>
            <pathelement location="${basedir}/ant-lib/ant-contrib-1.0b3.jar"/>
        </classpath>
    </taskdef>

    <loadproperties srcFile="/opt/Tomcat/apache-ant-1.9.6/chkout.properties"/>
    <property name="applist" value="${env.Applns_List}"/>

    <foreach list="${applist}"
                    delimiter=","
                    target="checkout"
                    param="appl.id" />

    <typedef resource="org/tigris/subversion/svnant/svnantlib.xml" /> 

    <svnSetting
            svnkit="true"
            javahl="false"
            username="xxx"
            password="xxx"
            id="svn.settings"/>  

    <target name="checkout"  description="checkout code"> 
        <forEach property="application" list="${applist}" delimiter=","> 
            <sequential>  
                <svn refid="svn.settings" >
                    <checkout url="${application}.url"
                          destPath="/opt/tibco/DeploymentFramework/checkout/"  />
                </svn>
            </sequential>
        </forEach>
    </target>
</project>

请帮我解决问题。

【问题讨论】:

    标签: ant ant-contrib


    【解决方案1】:

    Ant-Contrib &lt;foreach&gt; task 不能在 Ant 脚本的顶层使用。

    相反,&lt;foreach&gt; 必须在 &lt;target&gt; 内...

    <!-- Change the default target from "checkout" to "run" -->
    <project name="svncheckout" default="run">
        <target name="run">
            <!-- This <foreach> is now inside of a <target> -->
            <foreach list="${applist}"
                delimiter=","
                target="checkout"
                param="appl.id" />
        </target>
    
        <target name="checkout">
            <echo>appl.id is: ${appl.id}</echo>
        </target>
    </project>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-11-20
      • 1970-01-01
      • 1970-01-01
      • 2011-08-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多