Ant-contrib - 用于循环错误

时间:2013-12-02 20:38:14

标签: ant ant-contrib

当我尝试使用Ant-contrib的FOR循环时遇到以下错误:

Invalid type class org.apache.tools.ant.taskdefs.optional.script.ScriptDefBase used in For task, it does not have a public iterator method

我的代码如下:

<taskdef resource="net/sf/antcontrib/antcontrib.properties">
      <classpath>
        <pathelement location="WTemplateNewIshopForm/jar/ant-contrib-1.0b2.jar"/>
      </classpath>
    </taskdef>
    <taskdef resource="net/sf/antcontrib/antlib.xml">
     <classpath>
        <pathelement location="WTemplateNewIshopForm/jar/ant-contrib-1.0b2.jar"/>
      </classpath>
    </taskdef>

<scriptdef language="javascript" name="upstring">
        <attribute name="string" />
        <attribute name="to" />
        <![CDATA[
            var the_string = attributes.get( "string" );
            project.setProperty(
            attributes.get( "to" ),
            the_string.toUpperCase() );
        ]]>
    </scriptdef>

<property name="mulSvcTypes" value="TEST01;TEST02;TEST03;" />

<for list="${mulSvcTypes}" delimiter=";" param="mulSvcType">
                 <upstring string="${mulSvcType}" to="mulSvcTypeuc" />
                 <sql
                     driver="com.ibm.db2.jcc.DB2Driver" url="jdbc:db2://test.test" userid="test" password="test">
                     <classpath>  
                         <pathelement path="WTemplateNewIshopForm/jar/db2jcc.jar:WTemplateNewIshopForm/jar/db2jcc_license_cisuz.jar:WTemplateNewIshopForm/jar/db2jcc_license_cu.jar"/>  
                     </classpath>
                     <![CDATA[
                        INSERT INTO TEST.GRP VALUES ('${mulSvcTypeuc}', '${groupdb}', 'Y');
                     ]]>
                     <![CDATA[
                        INSERT INTO TEST.APRV VALUES ('${mulSvcTypeuc}', '${approver}');
                     ]]>        
                 </sql>
                </for>

错误是什么意思? 谢谢

1 个答案:

答案 0 :(得分:4)

for任务支持使用iterator()方法迭代嵌套元素,例如列表,文件集或任何内容。它还支持迭代list属性AND嵌套元素(如果两者都给出)。实际重复的任务(即for循环的“body”)需要在sequential元素内。

错误意味着您的第一个内部任务被视为迭代而不是您想要的循环体。由于它没有iterator()方法,因此会抛出错误。

要解决此问题,请尝试使用sequential任务包围您的两个内部任务。

有关详细信息,请参阅http://ant-contrib.sourceforge.net/tasks/tasks/for.html