假设我有一些Ant任务 - 比如javac或junit - 如果任一任务失败,我想执行一项任务,但如果他们成功了我就不会。
知道怎么做吗?
答案 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任务支持failonerror
和errorProperty
属性,可用于获取类似行为。
答案 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的确切语法,或者我举例说明。