我有几个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。如果它然后执行下一个任务,否则失败。
我曾尝试使用失败任务,但请帮忙。有人可以指导我吗?
答案 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>