使用Lombok,Gradle,Jacoco和Sonar过滤报道

时间:2018-01-29 12:44:54

标签: java gradle sonarqube jacoco lombok

我在我的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的报道仍然很低。它报告了大量的条件和线路。

2 个答案:

答案 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/

它归结为:

  1. 告诉行家将其依赖项复制到Sonar可以找到它们的地方。这很简单,只需添加:

    dependency:copy-dependencies
    
  2. 将以下内容添加到声纳构建步骤:

    -Dsonar.java.libraries=target/dependency/*.jar