Versions used
- SonarScanner for Gradle, version 3.1.1
- Java 11
- Sonarcloud
Error observed
The sonarqube Gradle task executes the JavaCompile tasks from the project, which it should not do according to the documentation:
Starting with v3.0 of the SonarScanner for Gradle, task dependencies are no longer added automatically. Instead, the SonarScanner plugin enforces the correct order of tasks with
mustRunAfter. You need to be either manually run the tasks that produce output beforesonarqube, or you can add a dependency to the build script
This causes a problem when trying to scan a Java 8 project that cannot be built with Java 11, following the procedure in the documentation.
For example, I have some code that compiles with Java 8 but not Java 11, which produces the following error message when executing the sonarqube task:
$ gw sonarqube -Dorg.gradle.java.home=/usr/lib/jvm/adoptopenjdk-11-hotspot-amd64
> Task :compileJava FAILED
/home/staylor/projects/sonarscanner-deps-bug/src/main/java/Main.java:4: error: package sun.util is not visible
new sun.util.ResourceBundleEnumeration(null, null);
^
(package sun.util is declared in module java.base, which does not export it)
1 error
FAILURE: Build failed with an exception.
Executing the sonarqube task with the --dry-run argument shows that there are dependencies on compile tasks:
:compileJava SKIPPED
:processResources SKIPPED
:classes SKIPPED
:compileTestJava SKIPPED
:sonarqube SKIPPED
My test build.gradle file is as follows:
plugins {
id 'java-library'
id 'org.sonarqube' version '3.1.1'
}
The bug seems to have been introduced by this commit, which adds the JavaCompile dependences at SonarQubePlugin.java#L96.
Steps to reproduce
Following the procedure described here:
- Execute the
buildtask using JDK 8. - Execute the
sonarqubetask using JDK 11.
Expected: sonarqube task completes without error.
Actual: sonarqube task exits with an error on the project’s compileJava task.
Potential workaround
I was able to workaround the problem by building the Gradle plugin from souce based on a 3.0 SNAPSHOT commit, and then using the following build.gradle to include the resulting jar file:
buildscript {
repositories {
flatDir dirs: 'lib'
mavenCentral()
}
dependencies {
classpath group: 'org.sonarsource.scanner.gradle', name: 'sonarqube-gradle-plugin', version: '3.0-SNAPSHOT'
classpath 'org.sonarsource.scanner.api:sonar-scanner-api:2.16.0.226'
}
}
plugins {
id 'java-library'
}
apply plugin: 'org.sonarqube'