Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
循环任务的ant contrib失败_Ant_Ant Contrib - Fatal编程技术网

循环任务的ant contrib失败

循环任务的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

为了在文件集中搜索多个字符串,我尝试使用ant contrib for。。循环而不成功。 下面是一个简单的例子

<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”

您需要添加for
ANT-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>