最新的Jacoco插件(仍然是快照版本,0.7.10-SNAPSHOT),有一个很好的新功能来过滤掉Lombok生成的代码(https://github.com/jacoco/jacoco/wiki/FilteringOptions)。我们需要做的就是使用
在存储库的根目录下添加一个lombok.config文件lombok.addLombokGeneratedAnnotation=true
当我在内部生成Jacoco报告时,我看到了差异,我很高兴。
然而,当我的常规质量工作执行并将结果发布到Sonar时,我会得到不同的(即更糟糕的)结果..
为什么我的本地报告和声纳中没有相同的结果?有没有解决方法?
由于
文森特
答案 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,因为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