【问题标题】:Aggregated Sonar report for mutiModule maven ProjectmutiModule maven 项目的综合声纳报告
【发布时间】:2021-03-25 03:12:04
【问题描述】:

我有一个类似这样的多模块模块项目的设置

模块1

|
 submodule1
|
submodule2

我在子模块 1 中编写了一个 Junit 测试,它也覆盖了子模块 2 的代码,但是当我尝试在声纳中查看覆盖率时,它显示子模块 2 的覆盖率为 0%,有什么方法可以显示子模块 2 的覆盖率吗?我也可以通过运行 mvn clean install jacoco:report-aggregate 来生成聚合的 xml 报告,但是如何将这个聚合的报告提供给声纳?如何设置模块和子模块的pom?

【问题讨论】:

  • 您如何称呼声纳?马文?你从哪里打电话给 Maven?
  • 请参考creating a parent pom.这应该会帮助你进一步。

标签: java maven sonarqube jacoco jacoco-maven-plugin


【解决方案1】:

我不确定这是否是你正在做的,但我还是会说出来。如果您将 submodule1 创建为“代码”并将 submodule2 创建为“测试”,那么这是一种组织它的可怕方式。测试(特别是单元测试)应该与它正在测试的代码一起存储。因此,每个子模块都有 src/main/java 和 src/test/java。

现在,也就是说,您有一个“common-lib”模块,然后是依赖于该 lib 的其他模块(例如应用程序层),这似乎是合理的。您很有可能在应用程序层运行测试并调用 lib 模块中的代码。但是您不会因此获得代码覆盖率。 Jacoco 对 lib 的覆盖将完全基于 lib 中的测试。 “应用程序”测试只为您提供应用程序的覆盖范围。这与 jacoco 运行时发生的检测有关 - 它只会检测它正在运行的模块的本地内容。

是的,有一个 jacoco-aggregate 报告,但这会将模块报告合并在一起 - 每个模块的单个报告。它不会为您提供对调用 lib 方法等的应用层测试的统一覆盖。

最后,声纳。我相信只要你有 jacoco 文件,声纳扫描仪就会使用它们。我认为它在原始 jacoco.exec 文件上运行,但可能能够解释 jacoco-result.xml 或 jacoco-aggregate.xml。如果它让您感到悲伤,请包含您的 pom.xml

【讨论】:

  • 作为 JaCoCo 开发人员,无法抗拒更正:默认情况下,JaCoCo 代理会检测所有加载到 JVM 中的类,无论它们是从哪个磁盘位置(即 Maven 模块)加载的。因此,jacoco:report-aggregate 可以“统一”覆盖一个 Maven 模块的类,因为来自另一个模块的类的调用。
猜你喜欢
  • 2023-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-25
  • 2022-01-15
  • 2018-09-09
  • 2013-03-21
  • 1970-01-01
相关资源
最近更新 更多