使用ANT测试最后一行日志文件

时间:2011-07-07 20:50:28

标签: ant automation batch-file

我有几个bat文件运行更多文件来构建项目。这是一个繁忙的过程。我写了一个主蚂蚁构建文件来做所有..

有一个BAT文件,它在成功运行时在控制台上打印BUILD SUCCESSFUL。 BUILD SUCCESSFUL是控制台输出的最后一行。

到目前为止,我已经在我的蚂蚁脚本中写了这个

<project name="MyProject" basedir=".">
    <property name="buildC" value="${basedir}/build-C" />
    <exec dir="${buildC}" executable="cmd" os="Windows XP">
        <arg line="/c test.bat > test.log"/>
    </exec>

    <loadfile property="buildC.log" srcFile="${buildC}/test.log">
    </loadfile>

</project>

如果 test.log 文件的最后一行是 BUILD SUCCESSFUL ,我会测试wana。如果它然后执行下一个任务,否则失败。

我曾尝试使用失败任务,但请帮忙。有人可以指导我吗?

2 个答案:

答案 0 :(得分:0)

您可以使用buildC.log任务的嵌套条件检查fail属性:

<fail message="test.bat failed">
   <condition>
       <not>
           <matches pattern="${line.separator}BUILD SUCCESSFUL$" string="${buildC.log}" />
       </not>
   </condition>
</fail>

您可能需要稍微调整模式才能使其正常工作,具体取决于test.bat脚本的确切内容。 matches默认情况下适用于整个字符串,因此只有在成功消息构成文件的最后一行时,上述内容才会匹配。

您还可以考虑使用exec任务outputproperty属性捕获test.bat的输出。

<exec dir="." executable="sh" outputproperty="buildC.log">
    <arg line="/c test.bat" />
</exec>

(请注意,arg行中已删除了shell重定向。)

答案 1 :(得分:0)

如果你想要最后一行,请使用带有tailfilter lines =“1”的过滤链,请参阅Ant Manual FilterChains
然后使用一些带有if {else构造的Ant Addon,如Flaka或{{ 3}}检查属性=

<project xmlns:fl="antlib:it.haefelinger.flaka">
 <loadfile srcfile="your.log" property="buildsuccess">
  <filterchain>
   <tailfilter lines="1" />
    <!-- also possible if needed -->
    <trim/>
    <striplinebreaks/>
    <!-- also possible if needed // -->
  </filterchain>
 </loadfile>

 <fl:choose>
  <fl:when test="'${buildsuccess}' eq 'BUILD SUCCESSFUL'">
   <echo>execute new task..</echo>
  </fl:when>
  <fl:otherwise>
   <fail message="Houston we have a problem.."/>
  </fl:otherwise>
</fl:choose>
</project>

或使用条件=

的标准蚂蚁方式
<project default="main">

 <target name="checklog">
  <loadfile srcfile="props.txt" property="buildsuccess">
   <filterchain>
    <tailfilter lines="1" />
    <!-- // also possible if needed -->
    <trim/>
    <striplinebreaks/>
    <!-- also possible if needed // -->
   </filterchain>
  </loadfile>

  <condition property="buildOK">
   <equals arg1="${buildsuccess}" arg2="BUILD SUCCESSFUL"/>
  </condition>    
 </target>

 <target name="whatever">
  <fail message="Houston we have a problem.." unless="buildOK"/>   
  <!-- if not failed then you'll go on with your other tasks here .. -->    
 </target>

 <target name="main" depends="checklog,whatever"/>
</project>