当我尝试使用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>
错误是什么意思? 谢谢
答案 0 :(得分:4)
for
任务支持使用iterator()
方法迭代嵌套元素,例如列表,文件集或任何内容。它还支持迭代list
属性AND嵌套元素(如果两者都给出)。实际重复的任务(即for循环的“body”)需要在sequential
元素内。
错误意味着您的第一个内部任务被视为迭代而不是您想要的循环体。由于它没有iterator()
方法,因此会抛出错误。
要解决此问题,请尝试使用sequential
任务包围您的两个内部任务。
有关详细信息,请参阅http://ant-contrib.sourceforge.net/tasks/tasks/for.html。