【问题标题】:Multiple Maven Projects, Single JaCoCo Site?多个 Maven 项目,单个 JaCoCo 站点?
【发布时间】:2017-02-28 15:09:09
【问题描述】:

我在一家公司工作,该公司使用多个 Maven 项目/模块来创建最终将成为一个产品的产品。为了帮助我解释,想象一个类似于下面的文件结构:

- Parent Directory
     - Project_1
           - /src/
           - /target/
           - POM.xml
     - Project_2
           - /src/
           - /target/
           - POM.xml

在我们使用 JUnit 对我们的代码进行单元测试的过程中,我们通过测试实现超过一定百分比的代码覆盖率阈值是一项重要的合同要求。

我们正在使用 JaCoCo 以 HTML 网站的形式生成覆盖率报告。 JaCoCo 本身被证明是无价的,但我们遇到的一个主要问题是这会在/target/site/jacoco/ 目录下创建一个站点。

我自己做了一些调查,发现除非我弄错了,否则 JaCoCo 默认不支持将多个 Maven 项目合并到一个 JaCoCo 报告中的能力。

所以我的问题是,任何人都可以提出一个替代解决方案 - 允许我们将多个报告聚合到单个 Web 服务器上吗?

我们有一个选择是将所有站点移动到网络服务器上的单独文件夹中,然后有一个索引页面将它们链接在一起,但它充其量是“笨拙”的。例如:

- Web Server
     - index.html
     - Project_1
           - (Generated report files)
     - Project_2
           - (Generated report files)

任何更好的建议将不胜感激。

【问题讨论】:

标签: java maven testing junit jacoco


【解决方案1】:

到目前为止,JaCoCo 还没有提供简单的方法来执行此操作。但是,他们确实指定了此处描述的三种替代方案:https://github.com/jacoco/jacoco/wiki/MavenMultiModule

他们最合适的方法是创建一个单独的报告模块,其中包含对所有其他模块的依赖项(在 github 文章中称为 Strategy: Module with Dependencies)。

报告模块使用 jacoco:report-aggregate (http://www.eclemma.org/jacoco/trunk/doc/report-aggregate-mojo.html) maven 目标来获取所有单独的报告并将它们绑定在一起。

一个示例项目:

https://prismoskills.appspot.com/lessons/Maven/Chapter_06_-_Jacoco_report_aggregation.jsp

【讨论】:

    【解决方案2】:

    您可以采用许多不同的方法。

    首先,您可能需要考虑像 Sonar 这样的东西,这样您就可以编译所有模块并运行一个 Sonar 来检查覆盖范围等。 Sonar 将获取结果并上传到声纳服务器(包括数据库和所有内容),这样您就可以在 UI 中看到出了什么问题

    另一种方法是滚动您自己的 Maven 插件(假设您使用的是 Maven)。如果我没记错的话,jacoco 生成的报告也是一个 XML 报告。所以它可以很容易地解析。因此,可以编写一个 Maven 插件来识别所有这样的报告,解析它们并提供一些统一的视图。

    另一种方法是在覆盖率未达到某个阈值时导致整个构建失败。我知道,它不会直接回答您的问题,但如果您这样做,您将保证最低覆盖范围(可以在项目级别不时增加)。

    【讨论】:

      猜你喜欢
      • 2011-03-23
      • 1970-01-01
      • 1970-01-01
      • 2012-09-03
      • 1970-01-01
      • 2021-06-09
      • 2015-04-08
      • 1970-01-01
      • 2017-01-30
      相关资源
      最近更新 更多