如果任务失败,如何执行Ant命令?

时间:2009-06-19 11:25:28

标签: java ant

假设我有一些Ant任务 - 比如javac或junit - 如果任一任务失败,我想执行一项任务,但如果他们成功了我就不会。

知道怎么做吗?

4 个答案:

答案 0 :(得分:15)

例如,在junit目标中,您可以设置failureProperty

<target name="junit" depends="compile-tests" description="Runs JUnit tests">
    <mkdir dir="${junit.report}"/>
    <junit printsummary="true" failureProperty="test.failed">
        <classpath refid="test.classpath"/>
        <formatter type="xml"/>
        <test name="${test.class}" todir="${junit.report}" if="test.class"/>
        <batchtest fork="true" todir="${junit.report}" unless="test.class">
            <fileset dir="${test.src.dir}">
                <include name="**/*Test.java"/>
                <exclude name="**/AllTests.java"/>
            </fileset>
        </batchtest>
    </junit>
</target>

然后,创建一个仅在test.failed属性设置时运行但在结束时失败的目标:

<target name="otherStuff" if="test.failed">
    <echo message="I'm here. Now what?"/>
    <fail message="JUnit test or tests failed."/>
</target>

最后,把它们绑在一起:

<target name="test" depends="junit,otherStuff"/>

然后只需调用test目标来运行JUnit测试。 junit目标将会运行。如果失败(失败或错误),将设置test.failed属性,并执行otherStuff目标的主体。

javac任务支持failonerrorerrorProperty属性,可用于获取类似行为。

答案 1 :(得分:6)

如Kai所述:

  

ant-contrib有一个trycatch任务。

但是你需要最新的版本1.0b3。然后使用

<trycatch>
    <try>
        ... <!-- your executions which may fail -->
    </try>
    <catch>
        ... <!-- execute on failure -->
        <throw message="xy failed" />
    </catch>
</trycatch>

诀窍是再次抛出错误以指示构建损坏。

答案 2 :(得分:1)

ant-contrib有一个trycatch任务。

答案 3 :(得分:0)

在要检查其失败的任务中设置属性,然后编写第二个任务,以便在未设置属性时执行该任务。我不记得build.xml的确切语法,或者我举例说明。