2011-07-07 104 views
4

我有幾個bat文件運行更多的文件來構建項目。它是一個繁忙的過程。我正在寫一個主螞蟻構建文件來做所有..使用ANT測試日誌文件的最後一行

有一個BAT文件,當它成功運行時,在控制檯上打印BUILD SUCCESSFUL。 BUILD SUCCESSFUL是控制檯輸出的最後一行。

我在Ant腳本到目前爲止

<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中文件的最後一行是生成成功或不寫這個。如果是,則執行下一個任務,否則失敗。

我曾嘗試使用失敗任務但din幫助。有人能指導我嗎?

回答

0

您可以使用fail任務的嵌套條件檢查buildC.log屬性:

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

您可能需要調整一點點得到它的工作模式,取決於究竟是什麼被測試寫入。蝙蝠腳本 默認情況下matches適用於整個字符串,因此只有成功消息構成文件的最後一行時,上述內容纔會匹配。

您也可以考慮使用exec任務outputproperty屬性捕獲test.bat的輸出。

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

(注外殼重定向已在arg線被刪除。)

0

如果你想在最後一行,使用帶有tailfilter線=「1」 filterchain,看到Ant Manual FilterChains
之後用一些螞蟻用插件的if/else構造像FlakaAntcontrib檢查屬性=

<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> 
相關問題