Как заставить 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, то было бы хорошо знать.
В любом случае, я очень ценю помощь! Спасибо!