我有ant target,它同时调用其他3个项目的ant build target for 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)如果任何一个子项目构建失败,生成构建报告,以便开发人员对其失败进行进一步的分析。
发布于 2011-06-20 20:06:11
由于您已经澄清了您的目标位于不同的项目中,即不同的构建文件中,因此您必须使用ant或subant任务,而不是antcall。subant任务有一个名为failonerror的参数,您可以将其设置为false,这样失败就不会停止顶级构建。我不知道是否有可能将子项目构建实际上未通过测试的信息传递回顶级构建。
如果您的目标都在同一项目中,您可以更改junit任务,以便在测试失败时它们不会失败,而是设置一个属性来指示发生了失败:
<junit failureProperty="test.failed"> ... </junit>然后,您可以在生成JUnit报告后使mainbuild目标失败:
<fail if="test.failed"> ... </fail>我从"Ant in Action“一书中学到了这一点。
https://stackoverflow.com/questions/6401794
复制相似问题