У меня есть многомодульная сборка 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
, я вижу:
Там четко указаны номера покрытия кода.
Итак, я запускаю 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
.
На изображении ниже нет номеров покрытия кода (в любой версии вышеупомянутых сонаркумов).
У меня есть допустимые проблемы с кодом, хотя (как и ожидалось).
Что я делаю не так и почему нет номеров покрытия кода?Это поддерживается только для SBT?Разве я не вызываю правильные цели Gradle?Я пропускаю параметры?
Как вы можете видеть здесь на экземпляре Sonar-Scala Sonarqube, там явно есть раздел "Покрытие", показывающий некоторые значения (которые я не получаю):
Может кто-нибудь, пожалуйста, пролить свет на это?Я пытался понять это в течение очень долгого времени.Если это ошибка или незавершенные функции, то выяснение этого также будет полезно.Если бы это поддерживалось только в SBT, было бы неплохо знать.
В любом случае, я бы очень признателен за помощь!Спасибо!