我有蚂蚁目标同时调用其他3个项目ant为junit构建目标。即使任何一个项目构建失败,此构建目标也会执行所有三个项目。这里的问题是,如果任何一个构建失败错误消息应该在编译三个项目构建目标后显示但是没有发生,我该如何解决呢?
<target name="mainbuild">
<antcall target="junit-1">//in different project
<antcall target="junit-2">//in different project
<antcall target="junit-3">//in different project
<junitreport todir="./reports">
<fileset dir="./project-1/reports">
<include name="TEST-*.xml"/>
</fileset>
<fileset dir="./project-2/reports">
<include name="TEST-*.xml"/>
</fileset>
<fileset dir="./project-3/reports">
<include name="TEST-*.xml"/>
</fileset>
<report format="frames" todir="./report/html"/>
</junitreport>
</target>
<target name="junit-1">
.... do somethig
</target>
<target name="junit-2">
.... do somethig
</target>
<target name="junit-3">
.... do somethig
</target>
1)主构建调用3个项目,即使在任何一个子项目中构建失败,最后构建成功的消息显示,也不应该发生
2)如果任何一个子项目构建失败,应该生成构建报告,以便开发人员可以进一步分析他的失败。
答案 0 :(得分:0)
由于您已阐明目标位于不同的项目中,即不同的构建文件,因此您必须使用ant
或subant
任务而不是antcall
。 subant
任务有一个名为failonerror
的参数,您可以将其设置为false,以便失败不会停止顶级构建。我不知道是否有可能将子项目构建实际上未通过测试的信息传回顶级构建。
如果您的目标都在同一个项目中,您可以更改junit任务,以便在测试失败时它们不会失败,而是设置一个属性以指示发生了故障:
<junit failureProperty="test.failed"> ... </junit>
然后,您可以在生成JUnit报告后使mainbuild目标失败:
<fail if="test.failed"> ... </fail>
我从“行动中的蚂蚁”一书中学到了这一点。