Sonar failure in gradle5 with SourceSetOutput.getClassesDir



我在 gradle 5 上运行声纳时遇到错误,我得到的错误是

What went wrong:
 org.gradle.api.tasks.SourceSetOutput.getClassesDir()Ljava/io/File;

Try:
Run with --info or --debug option to get more log output. Run with     --scan to get full insights.
Exception is:
java.lang.NoSuchMethodError:        
    org.gradle.api.tasks.SourceSetOutput.getClassesDir()Ljava/io/File;
at    org.sonarqube.gradle.SonarQubePlugin.configureSourceDirsAndJavaClasspath(SonarQubePlugin.java:169)
at    org.sonarqube.gradle.SonarQubePlugin.lambda$configureForJava$1(SonarQubePlugin.java:104)

我尝试将 gradle 版本降级到 4.0 并发现了问题,现在它显示

:sonarqube
Gradle now uses separate output directories for each JVM language, but this build assumes a single directory for all classes from a source set. This behaviour has been deprecated and is scheduled to be removed in Gradle 5.0
    at     org.gradle.api.internal.tasks.DefaultSourceSetOutput.getClassesDir(DefaultSourceSetOutput.java:79)
at    org.gradle.api.internal.tasks.DefaultSourceSetOutput_Decorated.getClassesDir(Unknown Source)
at  org.sonarqube.gradle.SonarQubePlugin.configureSourceDirsAndJavaClasspath(SonarQubePlugin.java:169)

我的代码中存在的 Gradle 配置如下,

sonarqube {
    properties {
        property "sonar.jacoco.reportPath", "${project.buildDir}/jacoco/test.exec"
        property "sonar.exclusions", "**/generated-*/**/*"
        property "sonar.sources", "src/main/java"
        property "sonar.tests", "src/test/java"
        //property "sonar.java.binaries", "${project.buildDir}/classes/main/"
    }
}

我相信可以通过将预期属性添加到 sonarqube 属性列表或显式设置源目录来解决此问题。任何人都可以就如何做到这一点提供建议吗?

我使用

Gradle 5.1,使用 org.sonarqube:2.5 观察到相同的情况。但是,当我使用 org.sonarqube:2.7 时,它对我有用。

plugins {
    id "org.sonarqube" version "2.7"
}

我用了Gradle 5.3,我得到了这个问题中的错误。然后我降级到Gradle 4.10.3.它像魔术一样工作。

不是一个完整的解决方案,我将构建脚本迁移到 kotlin,这对我有帮助。

最新更新