-
ALM: Bitbucket Cloud
-
CI system used: Circle CI, but this is not related to that
-
Scanner: Gradle plugin “org.sonarqube” version “4.0.0.2929”
-
Languages: Kotlin
-
Error observed:
In an otherwise working Gradle multi-project build for a Kotlin Android app, the SonarCloud page that lists the project’s files only includes the base app’s files and none from the sub-projects, meaning we can’t see coverage of the sub-project files.
Can anyone suggest how I can determine why the files are not being included in the analysis?
Detailed Config Info:
The build consists of 3 projects, managed as git submodules (each in its own repo):
- app
- uicommon
- platform-sdk
The builds executes as expected in Android Studio and on the command line; unit and android tests run in all three projects; lint & code coverage output .xml files are generated for each of the three modules.
But when the “sonar” Gradle task is run, only the files in the base ‘app’ are shown on the SonarCloud files page for the project.
I’ve looked at multiple claimed solutions on the web, including Sonarsource’s own github examples, and none cause the files of all projects to be included in the analysis:
Attempt 1: SonarScanner for Gradle
Attempt 2: How to setup sonar for multi-module gradle project
Attempt 3: sonar-scanning-examples/sonarqube-scanner-gradle/gradle-multimodule-coverage at master · SonarSource/sonar-scanning-examples · GitHub
Attempt 4: gradle - SonarQube for multi module project for Android - Stack Overflow
Attempt 5: sonar-scanning-examples/sonarqube-scanner-gradle/gradle-multimodule at master · SonarSource/sonar-scanning-examples · GitHub
File settings.gradle
includes:
include ':app'
include ':uicommon'
include ':platform-sdk'
The root build.gradle
file contains:
plugins {
id "org.sonarqube" version "4.0.0.2929"
}
sonar {
properties {
property "sonar.host.url", "https://sonarcloud.io"
property "sonar.projectName", "Android App"
property "sonar.projectKey", "android_app"
property "sonar.organization", "XXXX"
}
}
The app’s build.gradle
file contains:
apply plugin: "org.sonarqube"
sonar {
properties {
property "sonar.sources", "src/main/"
property "sonar.exclusions", ["src/main/res/**/*", "src/debug/"]
property "sonar.tests", ["src/androidTest/", "src/test/"]
}
}
And the uicommon and platform-sdk build.gradle
files contain:
apply plugin: "org.sonarqube"
sonar {
properties {
property "sonar.sources", "src/main/"
property "sonar.exclusions", "src/main/res/**/*"
property "sonar.tests", ["src/androidTest/", "src/test/"]
}
}
The SonarCloud “Code” tab only lists app/src
at the top level, and within that folder we see the expected files in the base app (the tests are identified, the debug and res files are correctly excluded):
Lines Of Code
app/src 8,084
androidTest/java/com/... —
main 8,084
test/java/com/... —
But none of the files in the uicommon
or platform-sdk
directories are shown.
After running the Gradle sonar
command, I see the three projects listed in the build/sonar
directory, which suggests it is aware of all three projects:
%> ls -1 build/sonar
android_app
platform-sdk
uicommon
report-task.txt