【问题标题】:ant task to generate mutiple targets in different projectant任务在不同项目中生成多个目标
【发布时间】:2011-06-19 10:14:13
【问题描述】:

我有 ant 目标,它同时为 junit 调用其他 3 个项目 ant 构建目标。即使任何一个项目构建失败,此构建目标也会执行所有三个项目。这里的问题是,如果在编译三个项目构建目标后应该显示任何一个构建失败错误消息但它没有发生,我该如何解决?

<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)如果子项目构建失败,应该生成构建报告,以便开发人员可以进一步分析他的失败。

【问题讨论】:

    标签: ant junit


    【解决方案1】:

    由于您已明确您的目标位于不同的项目中,即不同的构建文件,您将不得不使用antsubant 任务而不是antcallsubant 任务有一个名为 failonerror 的参数,您可以将其设置为 false,这样失败不会停止顶级构建。我不知道是否可以将子项目构建实际上未通过测试的信息传递回顶层构建。

    如果您的目标都在同一个项目中,您可以更改您的 junit 任务,以便在测试失败时它们不会失败,而是设置一个属性以指示发生了失败:

    <junit failureProperty="test.failed"> ... </junit>
    

    然后你可以在生成 JUnit 报告后让你的 mainbuild 目标失败:

    <fail if="test.failed"> ... </fail>
    

    我从《行动中的蚂蚁》一书中学到了这一点。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-12
      • 1970-01-01
      • 2023-03-03
      • 1970-01-01
      • 2023-04-08
      相关资源
      最近更新 更多