2016-08-04 42 views
3

Ich habe ein Groovy-Projekt mit mehreren Modulen mit Gradle. Ich habe Jacoco, Sonarqube Plugins angewendet.Wie meldet man Jacoco Groovy Code Coverage auf Sonar mit dem neuen Gradle SonarQube Plugin?

Ich war zu

  1. Suche build/jacoco/test.exec können. Jenkins konnte es richtig machen.
  2. Durchsuchen jacocoHtml mit allen Codeabdeckung Details
  3. Unit suchen Testergebnisse und Quellcode auf Sonarqube

Aber Code Coverage wurde nicht Sonarqube berichtet zu werden.

Hier ist meine build.gradle

plugins { 
    id "org.sonarqube" version "2.0.1" 
} 

allprojects { 
    group = 'my' 
    version = '1.0-SNAPSHOT' 
} 

subprojects { 
    apply plugin: 'groovy' 
    apply plugin: "jacoco" 

    dependencies { 
     compile group: 'org.codehaus.groovy', name: 'groovy-all', version: '2.4.1' 
     testCompile group: 'org.spockframework', name: 'spock-core', version: '1.0-groovy-2.4' 
     testCompile group: 'org.assertj', name: 'assertj-core', version: '2.4.1' 
    } 
} 

ich während eines Build folgenden Protokoll Aussagen beobachtet.

No binary directories defined for project core. 
Project coverage is set to 0% since there is no directories with classes. 

Ich habe dann versucht folgende Teilprojekte oder allprojects Zugabe und noch wurde die Abdeckung nicht zu Sonarqube berichtet.

sonarqube { 
    properties { 
     property "sonar.groovy.jacoco.reportPath", "${project.buildDir}/jacoco/test.exec" 
     property "sonar.jacoco.reportPath", "${project.buildDir}/jacoco/test.exec" 
     property "sonar.binaries", "${project.buildDir}/classes" 
     property "sonar.groovy.binaries", "${project.buildDir}/classes" 
    } 
} 

Wie kann ich die Berichterstattung über Jacoco Groovy-Code für SonarQube aktivieren?

+0

Ich denke, Ihre Konfiguration scheint in Ordnung. Obwohl wir dies für Binärdateien verwendet haben: "$ project.buildDir.name/classes". Vielleicht könnten Sie ein längeres Snippet aus Ihrem Protokoll hinzufügen, in dem Ihr Modul und der Pfad, in dem nach der Coverage-Datei gesucht wird, aufgeführt sind. Update: Sie möchten das Sonarqube-Plugin auf den Root anwenden, ansonsten könnte es sich tatsächlich um separate Projekte handeln. – dbalakirev

+0

Nun habe ich ein ähnliches Problem, wo für ein Projekt das funktioniert, aber nicht für das andere.Haben Sie versucht, die Konfiguration direkt auf die Root anzuwenden? – dbalakirev

Antwort

2

Sie haben vielleicht meine Kommentare gesehen, als ich mit dem gleichen Problem kämpfte.

Ich habe die groovy Plugins Website gefunden, wo ein Problem gemeldet wird, wie folgt:

sonar.groovy.binaries wird nur einmal für das Root-Projekt aufgelöst. In einem Multi-Modul-Projekt, bei dem die Eigenschaft nicht im Stammmodul definiert ist, sondern nur auf Blattmodulen, führt dies dazu, dass Informationen über die Abdeckung fehlen.

https://github.com/SonarQubeCommunity/sonar-groovy/issues/52

Also selbst wenn es für Ihr Modul-Set:

": myspecialsubmodule.sonar.groovy.binaries" -> „/ home/user/Projekte/root-Projekt/myspecialsubmodule/build/classes/main "

Es wird nicht funktionieren, bis es für den Stamm festgelegt ist.

Nach dem Festlegen der Config speziell auf der Wurzel (für jetzt, bis das Problem behoben ist) hat es für mich funktioniert.

Ich werde das Github-Problem im Auge behalten, um zu wissen, wann ich diese Problemumgehung entfernen kann.

+0

Lass mich das versuchen. Vielen Dank. Wird ein Update veröffentlichen. – phani

+2

Es hat funktioniert. Vielen Dank. Bitte bearbeite den relevanten Teil in deiner Antwort zu '" $ {project.buildDir.name} $ {File.separator} classes "' – phani

+0

Sehr guter Punkt. – dbalakirev