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

Vin*_*t F 8 java lombok sonarqube jacoco-maven-plugin

最新的Jacoco插件(仍然是快照版本,0.7.10-SNAPSHOT),有一个很好的新功能来过滤掉Lombok生成的代码(https://github.com/jacoco/jacoco/wiki/FilteringOptions).我们需要做的就是在存储库的根目录下添加一个lombok.config文件

lombok.addLombokGeneratedAnnotation=true 
Run Code Online (Sandbox Code Playgroud)

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

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

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

谢谢

文森特

Vin*_*t F 12

正如这里提到的: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日

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

使用:

  • 声纳6.7
  • SonarJava插件5.1.1.13214
  • jacoco maven插件0.8.1
  • lombok.config中的lombok.addLombokGeneratedAnnotation = true

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


veb*_*ben 7

首先你必须检查你的lombok版本至少是1.16.14

pom.xml :

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <scope>provided</scope>
    <version>1.16.14</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

然后你必须检查你的 Jacoco 版本是否至少是0.8.0

pom.xml :

<plugin>
    <groupId>org.jacoco</groupId>
    <artifactId>jacoco-maven-plugin</artifactId>
    <version>0.8.0</version>
    <!-- // -->
</plugin>
Run Code Online (Sandbox Code Playgroud)

然后你必须lombok.configsrc你的项目的文件夹中添加一个文件(不在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
Run Code Online (Sandbox Code Playgroud)

  • “不在资源文件夹中”对我来说很关键,谢谢! (4认同)