我在我的Java项目中使用Gradle 4.4和JaCoCo 0.8.0,Sonar使用SonarJava 5.0.1。
我有一个用lombok的@Value
和@Builder
注释的课程。
我在build.gradle中的JaCoCo配置如下所示:
jacoco {
toolVersion = "0.8.0"
reportsDir = file("$buildDir/reports/jacoco")
}
jacocoTestReport.doFirst{
classDirectories = files("buildDir/classes")
}
task jacocoReport(type: JacocoReport){
sourceSets sourceSets.main
executionData test, integrationTest
}
另外,我有lombok.confi文件,属性为lombok.addLombokGeneratedAnnotation = true
,生成的东西实际上在构建/类中有@lombok.Generated
注释。
然而,Sonar的报道仍然很低。它报告了大量的条件和线路。
答案 0 :(得分:3)
如announcement of release of JaCoCo version 0.8.0中所述:
请注意
直接读取exec文件(不是最终报告)并嵌入JaCoCo以生成报告的工具只有在更新到此版本的JaCoCo后才会提供过滤功能。
所以请关注/等待/等各自的供应商,如 SonarQube - https://jira.sonarsource.com/browse/SONARJAVA-2608
由我们(Ant Tasks,Maven插件和命令行界面)作为JaCoCo项目的一部分开发的相应版本(0.8.0)集成生成的报告提供过滤功能。
使用Gradle JaCoCo插件,您可以为" JaCoCoReport"选择运行时和版本。任务使用" toolVersion" - https://docs.gradle.org/current/userguide/jacoco_plugin.html
JaCoCo changelog中也说明了这一点:
注意:直接读取exec文件并为此嵌入JaCoCo的工具(例如 SonarQube 或Jenkins)只有在更新到此版本的JaCoCo后才会提供过滤功能。
截至今天(2018年1月29日),https://jira.sonarsource.com/browse/SONARJAVA-2608的修复应该是尚未发布的SonarJava插件版本5.1。
综上所述:Gradle生成的报告应该已经过滤,SonarQube生成的报告将在升级SonarJava后进行过滤。
答案 1 :(得分:1)
除了配置lombok之外,我还必须告诉声纳扫描仪在哪里可以找到依赖项。是摆脱SonarQube中“未使用的私有字段应删除”消息的唯一方法。
我遵循了以下网站的指示:https://netwolfuk.wordpress.com/2017/10/29/maven-sonarqube-jacoco-lombok-and-teamcity/
它归结为:
告诉行家将其依赖项复制到Sonar可以找到它们的地方。这很简单,只需添加:
dependency:copy-dependencies
将以下内容添加到声纳构建步骤:
-Dsonar.java.libraries=target/dependency/*.jar