Как заставить Gradle, Scoverage и Sonarqube работать правильно? - PullRequest
0 голосов
/ 24 февраля 2019

У меня есть многомодульная сборка Gradle, которая компилирует код Scala.Я хотел бы отсканировать код, собрать покрытие кода и передать результаты в Sonarqube.

My "Hello, World!"для этого вопроса находится здесь .

Я запускаю следующую команду:

$ ./gradlew clean build reportScoverage aggregateScoverage
Starting a Gradle Daemon (subsequent builds will be faster)

> Task :a:compileScala
Pruning sources from previous analysis, due to incompatible CompileSetup.

> Task :a:compileTestScala
Pruning sources from previous analysis, due to incompatible CompileSetup.

> Task :b:compileScala
Pruning sources from previous analysis, due to incompatible CompileSetup.

> Task :b:compileTestScala
Pruning sources from previous analysis, due to incompatible CompileSetup.

> Task :a:compileScoverageScala
Pruning sources from previous analysis, due to incompatible CompileSetup.

> Task :a:reportScoverage
[scoverage] Generating scoverage reports...
[scoverage] Written Cobertura XML report to /java/opensource/gradle/gradle-scoverage-multi-module/a/build/reports/scoverage/cobertura.xml
[scoverage] Written XML report to /java/opensource/gradle/gradle-scoverage-multi-module/a/build/reports/scoverage/scoverage.xml
[scoverage] Written HTML report to /java/opensource/gradle/gradle-scoverage-multi-module/a/build/reports/scoverage/index.html
[scoverage] Coverage reports completed

> Task :b:compileScoverageScala
Pruning sources from previous analysis, due to incompatible CompileSetup.

> Task :b:reportScoverage
[scoverage] Generating scoverage reports...
[scoverage] Written Cobertura XML report to /java/opensource/gradle/gradle-scoverage-multi-module/b/build/reports/scoverage/cobertura.xml
[scoverage] Written XML report to /java/opensource/gradle/gradle-scoverage-multi-module/b/build/reports/scoverage/scoverage.xml
[scoverage] Written HTML report to /java/opensource/gradle/gradle-scoverage-multi-module/b/build/reports/scoverage/index.html
[scoverage] Coverage reports completed

> Task :aggregateScoverage
[info] Found 2 subproject report files [/java/opensource/gradle/gradle-scoverage-multi-module/a/build/reports/scoverage/scoverage.xml,/java/opensource/gradle/gradle-scoverage-multi-module/b/build/reports/scoverage/scoverage.xml]
[scoverage] Generating scoverage reports...
[scoverage] Written Cobertura XML report to /java/opensource/gradle/gradle-scoverage-multi-module/build/scoverage-aggregate/cobertura.xml
[scoverage] Written XML report to /java/opensource/gradle/gradle-scoverage-multi-module/build/scoverage-aggregate/scoverage.xml
[scoverage] Written HTML report to /java/opensource/gradle/gradle-scoverage-multi-module/build/scoverage-aggregate/index.html
[scoverage] Coverage reports completed

BUILD SUCCESSFUL in 13s
21 actionable tasks: 21 executed

Когда я открываю /java/opensource/gradle/gradle-scoverage-multi-module/build/scoverage-aggregate/index.html, я вижу:

Screenshot 1

Там четко указаны номера покрытия кода.

Итак, я запускаю sonar-scanner, чтобы отправить информацию в Sonarqube:

$ sonar-scanner -Dsonar.projectName=multi-module \
                -Dsonar.projectKey=multi-module \
                -Dsonar.projectVersion=1.0-SNAPSHOT \
                -Dsonar.sources=src/main/scala \
                -Dsonar.modules=a,b \
                -Dsonar.sourceEncoding=UTF-8 \
                -Dsonar.scala.version=2.11 \
                -Dsonar.scala.scoverage.reportPath=build/scoverage-aggregate/scoverage.xml \
                -Dsonar.host.url=http://localhost:80/

В приведенном выше примере я запускаю его для образа Docker по умолчанию из https://github.com/mwz/sonar-scala-docker, но я также пробовал это с локальными установками Sonarqube 6.7.6 с sonar-scala_2.12-6.7.0-assembly.jar и Sonar 7.4 with sonar-scala_2.12-7.3.1-assembly.jar.

На изображении ниже нет номеров покрытия кода (в любой версии вышеупомянутых сонаркумов).

No code coverage

У меня есть допустимые проблемы с кодом, хотя (как и ожидалось).

Что я делаю не так и почему нет номеров покрытия кода?Это поддерживается только для SBT?Разве я не вызываю правильные цели Gradle?Я пропускаю параметры?

Как вы можете видеть здесь на экземпляре Sonar-Scala Sonarqube, там явно есть раздел "Покрытие", показывающий некоторые значения (которые я не получаю):

What a valid Coverage section looks like

Может кто-нибудь, пожалуйста, пролить свет на это?Я пытался понять это в течение очень долгого времени.Если это ошибка или незавершенные функции, то выяснение этого также будет полезно.Если бы это поддерживалось только в SBT, было бы неплохо знать.

В любом случае, я бы очень признателен за помощь!Спасибо!

1 Ответ

0 голосов
/ 21 мая 2019

Чтобы ответить на мой вопрос, две вещи:

  • В проекте sonar-scala есть примеры как для одно-, так и для многомодульных проектов здесь .
  • При выполнении сборки под Windows покрытие кода не будет работать из-за открытых проблем ( 64 и # 65 ) с sonar-scala.
...