Как заставить Gradle, Scoverage и Sonarqube работать правильно?

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

Мой "Привет, мир!" для этого вопрос находится здесь.

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

$ ./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, Я могу видеть:

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

Итак, я бегу 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 и сонар 7.4 с sonar-scala_2.12-7.3.1-assembly.jar,

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

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

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

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

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

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

0 ответов

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

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