【问题标题】:Resource Count in Ant ScriptsAnt 脚本中的资源计数
【发布时间】:2016-03-30 14:34:51
【问题描述】:

我只需要知道如何修改下面的代码,以便 ant 确定我的文本文件中的行数(请注意,这里的所有文本文件都将具有相同的行数,但该行数不固定)并自动执行它们基于循环。

<project name="ant-read-n-files" default="run" basedir=".">
  
  <!-- Load the ant contrib lib -->
  <taskdef resource="net/sf/antcontrib/antlib.xml">
    <classpath>
      <pathelement location="${basedir}/lib/ant-contrib.jar"/>
    </classpath>
  </taskdef>
  
  <target name="read">
    <!-- file a -->
    <loadfile property="textFileA" srcfile="${basedir}/files/aaa.txt">
      <filterchain>
        <headfilter lines="1" skip="${linenum}"/>
      </filterchain>
    </loadfile>
    <for param="line" list="${textFileA}" delimiter="${line.separator}">
      <sequential>
        <property name="textFileAValue" value="@{line}"/>
      </sequential>
    </for>
    <!-- file b -->
    <loadfile property="textFileB" srcfile="${basedir}/files/bbb.txt">
      <filterchain>
        <headfilter lines="1" skip="${linenum}"/>
      </filterchain>
    </loadfile>
    <for param="line" list="${textFileB}" delimiter="${line.separator}">
      <sequential>
        <property name="textFileBValue" value="@{line}"/>
      </sequential>
    </for>
    <!-- file c -->
    <loadfile property="textFileC" srcfile="${basedir}/files/ccc.txt">
      <filterchain>
        <headfilter lines="1" skip="${linenum}"/>
      </filterchain>
    </loadfile>
    <for param="line" list="${textFileC}" delimiter="${line.separator}">
      <sequential>
        <property name="textFileCValue" value="@{line}"/>
      </sequential>
    </for>
 
    <!-- Print them all -->
    <echo message="${textFileAValue}"/>
    <echo message="${textFileBValue}"/>
    <echo message="${textFileCValue}"/>
  </target>
 
  <target name="run">
    <foreach param="linenum" list="0,1,2" target="read"/>
  </target>
</project>

在这里,如您所见,list = "0,1,2" 表示循环将验证每个文本文件的前三行,但我希望这是动态的,具体取决于文件的行数。 在这里的任何帮助将不胜感激。

谢谢, 阿什利

【问题讨论】:

  • 您是否考虑过将 SonarQube 集成到您的构建中?源代码计数是收集并报告给网络应用仪表板的指标之一。

标签: ant ant-contrib


【解决方案1】:

以下解决方案在这里有效:-

<project name="ant-read-n-files" default="run" basedir=".">
  
  <!-- Load the ant contrib lib -->
  <taskdef resource="net/sf/antcontrib/antlib.xml">
    <classpath>
      <pathelement location="${basedir}/lib/ant-contrib.jar"/>
    </classpath>
  </taskdef>
  
  <target name="read">
    <!-- file a -->
    <loadfile property="textFileA" srcfile="${basedir}/files/aaa.txt">
      <filterchain>
        <headfilter lines="1" skip="${linenum}"/>
      </filterchain>
    </loadfile>
    <for param="line" list="${textFileA}" delimiter="${line.separator}">
      <sequential>
        <property name="textFileAValue" value="@{line}"/>
      </sequential>
    </for>
    <!-- file b -->
    <loadfile property="textFileB" srcfile="${basedir}/files/bbb.txt">
      <filterchain>
        <headfilter lines="1" skip="${linenum}"/>
      </filterchain>
    </loadfile>
    <for param="line" list="${textFileB}" delimiter="${line.separator}">
      <sequential>
        <property name="textFileBValue" value="@{line}"/>
      </sequential>
    </for>
    <!-- file c -->
    <loadfile property="textFileC" srcfile="${basedir}/files/ccc.txt">
      <filterchain>
        <headfilter lines="1" skip="${linenum}"/>
      </filterchain>
    </loadfile>
    <for param="line" list="${textFileC}" delimiter="${line.separator}">
      <sequential>
        <property name="textFileCValue" value="@{line}"/>
      </sequential>
    </for>
 
    <!-- Print them all -->
    <echo message="${textFileAValue}"/>
    <echo message="${textFileBValue}"/>
    <echo message="${textFileCValue}"/>
  </target>
 
  <target name="run">
    <!-- Get number of lines of one of the files -->
    <loadfile property="textFile" srcfile="${basedir}/files/aaa.txt"/>
    <resourcecount property="line.count" count="0" when="eq">
      <tokens>
        <concat>
          <filterchain>
            <tokenfilter>
              <stringtokenizer delims="${line.separator}" />
            </tokenfilter>
          </filterchain>
          <propertyresource name="textFile" />
        </concat>
      </tokens>
    </resourcecount>
    <echo message="Number of lines: ${line.count}" />
 
    <script language="javascript">
      var list="", n=parseInt(project.getProperty("line.count"), 0);
      for (var i = 0; i &lt; n; i++) list += i + ",";  
      project.setProperty("list", list);
    </script>
    <foreach param="linenum" list="${list}" target="read"/>
 
  </target>
</project>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多