循环任务的ant contrib失败
为了在文件集中搜索多个字符串,我尝试使用ant contrib for。。循环而不成功。 下面是一个简单的例子循环任务的ant contrib失败,ant,ant-contrib,Ant,Ant Contrib,为了在文件集中搜索多个字符串,我尝试使用ant contrib for。。循环而不成功。 下面是一个简单的例子 <project name="testing" default="main" basedir="."> <taskdef resource="net/sf/antcontrib/antcontrib.properties"> <classpath> <pathelement location="/usr/share/java/an
<project name="testing" default="main" basedir=".">
<taskdef resource="net/sf/antcontrib/antcontrib.properties">
<classpath>
<pathelement location="/usr/share/java/ant-contrib-0.3.jar"/>
</classpath>
</taskdef>
<task name=main">
<echo message="The first five letters of the alphabet are:"/>
<for list="a,b,c,d,e" param="letter">
<sequential>
<echo>Letter @{letter}</echo>
</sequential>
</for>
</task>
</project>
<loadfile property="dtdNAMES" srcFile="_dtdNAMES_1.txt"/>
<echo>.:${dtdNAMES}:.</echo>
<target name="main">
<for list="xyz.name,xyz.version,xyz.general,xyz.generalXXX,xyz.ok" param="search4" delimiter=",">
<!--for list="${dtdNames}" param="search4" delimiter=","-->
<!-- do the stuff here with param -->
<sequential>
<fileset id="existing" dir="../src">
<patternset id="files">
<include name="content/**/*.xul"/>
</patternset>
</fileset>
<resourcecount property="count">
<fileset id="matches" dir="../src">
<patternset refid="files" />
<contains text="@{search4}" />
</fileset>
</resourcecount>
<echo message="Found '@{search4}' in files : '${count}'"/>
</sequential>
</for>
</target>
这个怎么了
<loadfile property="dtdNAMES" srcFile="_dtdNAMES_1.txt"/>
<echo>.:${dtdNAMES}:.</echo>
<target name="main">
<for list="xyz.name,xyz.version,xyz.general,xyz.generalXXX,xyz.ok" param="search4" delimiter=",">
<!--for list="${dtdNames}" param="search4" delimiter=","-->
<!-- do the stuff here with param -->
<sequential>
<fileset id="existing" dir="../src">
<patternset id="files">
<include name="content/**/*.xul"/>
</patternset>
</fileset>
<resourcecount property="count">
<fileset id="matches" dir="../src">
<patternset refid="files" />
<contains text="@{search4}" />
</fileset>
</resourcecount>
<echo message="Found '@{search4}' in files : '${count}'"/>
</sequential>
</for>
</target>
不确定我是否需要ant-contrib-0.3.jar的taskdef
<loadfile property="dtdNAMES" srcFile="_dtdNAMES_1.txt"/>
<echo>.:${dtdNAMES}:.</echo>
<target name="main">
<for list="xyz.name,xyz.version,xyz.general,xyz.generalXXX,xyz.ok" param="search4" delimiter=",">
<!--for list="${dtdNames}" param="search4" delimiter=","-->
<!-- do the stuff here with param -->
<sequential>
<fileset id="existing" dir="../src">
<patternset id="files">
<include name="content/**/*.xul"/>
</patternset>
</fileset>
<resourcecount property="count">
<fileset id="matches" dir="../src">
<patternset refid="files" />
<contains text="@{search4}" />
</fileset>
</resourcecount>
<echo message="Found '@{search4}' in files : '${count}'"/>
</sequential>
</for>
</target>
注意:ANT在Eclipse中运行,其版本为:“ApacheAnt 1.8.2v20110505-1300”您需要添加forANT-contrib-0.3.jar
。ant contrib页面告诉您如何执行此操作:
<loadfile property="dtdNAMES" srcFile="_dtdNAMES_1.txt"/>
<echo>.:${dtdNAMES}:.</echo>
<target name="main">
<for list="xyz.name,xyz.version,xyz.general,xyz.generalXXX,xyz.ok" param="search4" delimiter=",">
<!--for list="${dtdNames}" param="search4" delimiter=","-->
<!-- do the stuff here with param -->
<sequential>
<fileset id="existing" dir="../src">
<patternset id="files">
<include name="content/**/*.xul"/>
</patternset>
</fileset>
<resourcecount property="count">
<fileset id="matches" dir="../src">
<patternset refid="files" />
<contains text="@{search4}" />
</fileset>
</resourcecount>
<echo message="Found '@{search4}' in files : '${count}'"/>
</sequential>
</for>
</target>
<loadfile property="dtdNAMES" srcFile="_dtdNAMES_1.txt"/>
<echo>.:${dtdNAMES}:.</echo>
<target name="main">
<for list="xyz.name,xyz.version,xyz.general,xyz.generalXXX,xyz.ok" param="search4" delimiter=",">
<!--for list="${dtdNames}" param="search4" delimiter=","-->
<!-- do the stuff here with param -->
<sequential>
<fileset id="existing" dir="../src">
<patternset id="files">
<include name="content/**/*.xul"/>
</patternset>
</fileset>
<resourcecount property="count">
<fileset id="matches" dir="../src">
<patternset refid="files" />
<contains text="@{search4}" />
</fileset>
</resourcecount>
<echo message="Found '@{search4}' in files : '${count}'"/>
</sequential>
</for>
</target>
现在应该给出:
Buildfile: c:\build.xml
[echo] The first five letters of the alphabet are:
[echo] Letter a
[echo] Letter b
[echo] Letter c
[echo] Letter d
[echo] Letter e
BUILD SUCCESSFUL
Total time: 0 seconds
<loadfile property="dtdNAMES" srcFile="_dtdNAMES_1.txt"/>
<echo>.:${dtdNAMES}:.</echo>
<target name="main">
<for list="xyz.name,xyz.version,xyz.general,xyz.generalXXX,xyz.ok" param="search4" delimiter=",">
<!--for list="${dtdNames}" param="search4" delimiter=","-->
<!-- do the stuff here with param -->
<sequential>
<fileset id="existing" dir="../src">
<patternset id="files">
<include name="content/**/*.xul"/>
</patternset>
</fileset>
<resourcecount property="count">
<fileset id="matches" dir="../src">
<patternset refid="files" />
<contains text="@{search4}" />
</fileset>
</resourcecount>
<echo message="Found '@{search4}' in files : '${count}'"/>
</sequential>
</for>
</target>
同样,基本示例也有效,第一次发布时所述的需求
<loadfile property="dtdNAMES" srcFile="_dtdNAMES_1.txt"/>
<echo>.:${dtdNAMES}:.</echo>
<target name="main">
<for list="xyz.name,xyz.version,xyz.general,xyz.generalXXX,xyz.ok" param="search4" delimiter=",">
<!--for list="${dtdNames}" param="search4" delimiter=","-->
<!-- do the stuff here with param -->
<sequential>
<fileset id="existing" dir="../src">
<patternset id="files">
<include name="content/**/*.xul"/>
</patternset>
</fileset>
<resourcecount property="count">
<fileset id="matches" dir="../src">
<patternset refid="files" />
<contains text="@{search4}" />
</fileset>
</resourcecount>
<echo message="Found '@{search4}' in files : '${count}'"/>
</sequential>
</for>
</target>
在文件集中搜索多个字符串的步骤
<loadfile property="dtdNAMES" srcFile="_dtdNAMES_1.txt"/>
<echo>.:${dtdNAMES}:.</echo>
<target name="main">
<for list="xyz.name,xyz.version,xyz.general,xyz.generalXXX,xyz.ok" param="search4" delimiter=",">
<!--for list="${dtdNames}" param="search4" delimiter=","-->
<!-- do the stuff here with param -->
<sequential>
<fileset id="existing" dir="../src">
<patternset id="files">
<include name="content/**/*.xul"/>
</patternset>
</fileset>
<resourcecount property="count">
<fileset id="matches" dir="../src">
<patternset refid="files" />
<contains text="@{search4}" />
</fileset>
</resourcecount>
<echo message="Found '@{search4}' in files : '${count}'"/>
</sequential>
</for>
</target>
这个问题还没有解决。以下是我现在拥有的:
<loadfile property="dtdNAMES" srcFile="_dtdNAMES_1.txt"/>
<echo>.:${dtdNAMES}:.</echo>
<target name="main">
<for list="xyz.name,xyz.version,xyz.general,xyz.generalXXX,xyz.ok" param="search4" delimiter=",">
<!--for list="${dtdNames}" param="search4" delimiter=","-->
<!-- do the stuff here with param -->
<sequential>
<fileset id="existing" dir="../src">
<patternset id="files">
<include name="content/**/*.xul"/>
</patternset>
</fileset>
<resourcecount property="count">
<fileset id="matches" dir="../src">
<patternset refid="files" />
<contains text="@{search4}" />
</fileset>
</resourcecount>
<echo message="Found '@{search4}' in files : '${count}'"/>
</sequential>
</for>
</target>
结果“3”属于具有“xyz.name”的第一个循环,是的,所有文件中都有3个匹配项。但是其他字符串在所有文件中都有其他匹配项。任何文件中都没有“xyz.generalXXX”字符串
<loadfile property="dtdNAMES" srcFile="_dtdNAMES_1.txt"/>
<echo>.:${dtdNAMES}:.</echo>
<target name="main">
<for list="xyz.name,xyz.version,xyz.general,xyz.generalXXX,xyz.ok" param="search4" delimiter=",">
<!--for list="${dtdNames}" param="search4" delimiter=","-->
<!-- do the stuff here with param -->
<sequential>
<fileset id="existing" dir="../src">
<patternset id="files">
<include name="content/**/*.xul"/>
</patternset>
</fileset>
<resourcecount property="count">
<fileset id="matches" dir="../src">
<patternset refid="files" />
<contains text="@{search4}" />
</fileset>
</resourcecount>
<echo message="Found '@{search4}' in files : '${count}'"/>
</sequential>
</for>
</target>
问题:如何获得所有文件中所有字符串的正确结果
<loadfile property="dtdNAMES" srcFile="_dtdNAMES_1.txt"/>
<echo>.:${dtdNAMES}:.</echo>
<target name="main">
<for list="xyz.name,xyz.version,xyz.general,xyz.generalXXX,xyz.ok" param="search4" delimiter=",">
<!--for list="${dtdNames}" param="search4" delimiter=","-->
<!-- do the stuff here with param -->
<sequential>
<fileset id="existing" dir="../src">
<patternset id="files">
<include name="content/**/*.xul"/>
</patternset>
</fileset>
<resourcecount property="count">
<fileset id="matches" dir="../src">
<patternset refid="files" />
<contains text="@{search4}" />
</fileset>
</resourcecount>
<echo message="Found '@{search4}' in files : '${count}'"/>
</sequential>
</for>
</target>
ad 2。为了灵活性,最终解决方案需要将列表字符串替换为以下属性
<loadfile property="dtdNAMES" srcFile="_dtdNAMES_1.txt"/>
<echo>.:${dtdNAMES}:.</echo>
<target name="main">
<for list="xyz.name,xyz.version,xyz.general,xyz.generalXXX,xyz.ok" param="search4" delimiter=",">
<!--for list="${dtdNames}" param="search4" delimiter=","-->
<!-- do the stuff here with param -->
<sequential>
<fileset id="existing" dir="../src">
<patternset id="files">
<include name="content/**/*.xul"/>
</patternset>
</fileset>
<resourcecount property="count">
<fileset id="matches" dir="../src">
<patternset refid="files" />
<contains text="@{search4}" />
</fileset>
</resourcecount>
<echo message="Found '@{search4}' in files : '${count}'"/>
</sequential>
</for>
</target>
看来政府不允许处理财产?
如何正确编写?可能的副本以ant-contrib-0.6.jar结束运行。。不是-0.3.jar!请注意,
net/sf/antcontrib/antcontrib.properties
据说只适用于第页的ant版本1.5或更低版本。如果对你有用,那太好了!您应该使用最新版本1.0b3/2006-11-02,正如S.R.I在他的回答和上面的评论中所说的那样。只需将${dtdNames}更改为${list}即可解决问题#2但问题1仍然没有解决!要获得所有文件中列表中每个字符串的单个匹配项的正确列表,解决方案是什么?您应该删除此选项。这不是一个答案。。。。你在这里问过这个问题:
<loadfile property="dtdNAMES" srcFile="_dtdNAMES_1.txt"/>
<echo>.:${dtdNAMES}:.</echo>
<target name="main">
<for list="xyz.name,xyz.version,xyz.general,xyz.generalXXX,xyz.ok" param="search4" delimiter=",">
<!--for list="${dtdNames}" param="search4" delimiter=","-->
<!-- do the stuff here with param -->
<sequential>
<fileset id="existing" dir="../src">
<patternset id="files">
<include name="content/**/*.xul"/>
</patternset>
</fileset>
<resourcecount property="count">
<fileset id="matches" dir="../src">
<patternset refid="files" />
<contains text="@{search4}" />
</fileset>
</resourcecount>
<echo message="Found '@{search4}' in files : '${count}'"/>
</sequential>
</for>
</target>