从Sonar覆盖率报告中排除Lombok类

时间:2017-11-22 08:55:30

标签: sonarqube lombok jacoco-maven-plugin

最新的Jacoco插件(仍然是快照版本,0.7.10-SNAPSHOT),有一个很好的新功能来过滤掉Lombok生成的代码(https://github.com/jacoco/jacoco/wiki/FilteringOptions)。我们需要做的就是使用

在存储库的根目录下添加一个lombok.config文件
lombok.addLombokGeneratedAnnotation=true 

当我在内部生成Jacoco报告时,我看到了差异,我很高兴。

然而,当我的常规质量工作执行并将结果发布到Sonar时,我会得到不同的(即更糟糕的)结果..

为什么我的本地报告和声纳中没有相同的结果?有没有解决方法?

由于

文森特

2 个答案:

答案 0 :(得分:9)

如前所述:https://github.com/jacoco/jacoco/pull/513#issuecomment-293176354

过滤是在生成报告(创建html,xml等)时执行的,而不是在收集执行信息(创建exec文件)时执行的。因此,工具直接读取执行数据而不是读取xml(这是一种错误,他们依靠纯粹的内部中间格式,但做了什么)并创建自己的报告(如SonarQube,Jenkins等) )一旦它将被释放,将需要更新它们对JaCoCo的依赖性,以便过滤报告。在我们的发布完成后,我们将明确通知下游项目(特别是上面提到的所有项目)。再一次 - 请耐心等待。感谢您的理解。

我没有找到Sonar阅读结束报告而不是exec文件的方法,所以我想我们需要耐心等待官方0.7.10 jacoco插件发布,然后更新Sonar方面!

------ 2018年5月9日更新

新版本已经发布,我可以确认它对我有用。

使用:

  • Sonar 6.7
  • SonarJava插件5.1.1.13214
  • jacoco maven plugin 0.8.1
  • lombok.addLombokGeneratedAnnotation = true in lombok.config

我现在得到更好的报告结果报告给Sonar,因为Lombok生成的代码现在被忽略了。它确实有助于确定“真正的”未覆盖区域是什么,以及它是否有风险。

答案 1 :(得分:1)

首先,您必须检查您的龙目岛版本至少为 1.16.14

pom.xml

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <scope>provided</scope>
    <version>1.16.14</version>
</dependency>

然后,您必须检查Jacoco版本是否至少为 0.8.0

pom.xml

<plugin>
    <groupId>org.jacoco</groupId>
    <artifactId>jacoco-maven-plugin</artifactId>
    <version>0.8.0</version>
    <!-- // -->
</plugin>

然后,您必须在项目的lombok.config文件夹中添加一个src文件(不在resources文件夹中

lombok.config

# tells Lombok that this is the root directory and that it shouldn’t search parent directories for more configuration files
config.stopBubbling = true
# tells Lombok to add @lombok.Generated annotation to all generated methods
lombok.addLombokGeneratedAnnotation = true
相关问题