1

Sonarqube 不适用于 Android Studio 3.0(Gradle 2.3.3,启用 Jack)。

场景

工作正常:

  1. 使用 Gradle 2.3.3 在 Android Studio 3.0 中创建默认项目
  2. 编译,构建,一切正常。
  3. 添加插件“org.sonarqube”(类路径,应用)
  4. 使用参数启动声纳:

    --stacktrace -Dsonar.host.url=http://localhost:9000 -Dsonar.login=XXXX
    
  5. 一切都好,没有错误,在网络控制台中我看到了结果。

不工作:

  1. 使用 Gradle 2.3.3 在 Android Studio 3.0 中创建默认项目
  2. 添加插件'me.tatarka.retrolambda'(类路径,应用),编译,构建。
  3. 在 MainActivity 中使用 lambda
  4. 添加到 build.gradle:

    compileOptions {
        targetCompatibility JavaVersion.VERSION_1_8
        sourceCompatibility JavaVersion.VERSION_1_8
    }
    

    jackOptions {
        enabled true
    }
    
  5. 编译,构建,一切正常。

  6. 添加插件“org.sonarqube”(类路径,应用)。
  7. 使用参数启动声纳:

    --stacktrace -Dsonar.host.url=http://localhost:9000 -Dsonar.login=XXXX
    
  8. gradle 控制台中的错误:

:app:sonarqube
Unable to find Java compiler on variant 'debugAndroidTest'. Is Jack toolchain used? SonarQube analysis will be less accurate without bytecode.
:app:sonarqube FAILED

Unable to find Java compiler on variant 'debugAndroidTest'. Is Jack toolchain used? SonarQube analysis will be less accurate without bytecode.

:app:sonarqube FAILED

FAILURE: Build failed with an exception.

* What went wrong:
java.lang.NullPointerException (no error message)

* Try:
Run with --info or --debug option to get more log output.

* Exception is:
java.lang.NullPointerException
    at org.sonarqube.gradle.SonarQubePlugin.appendProps(SonarQubePlugin.java:216)
    at org.sonarqube.gradle.SonarQubePlugin.setTestClasspathProps(SonarQubePlugin.java:226)
    at org.sonarqube.gradle.AndroidUtils.populateSonarQubeProps(AndroidUtils.java:203)
    at org.sonarqube.gradle.AndroidUtils.configureForAndroid(AndroidUtils.java:87)
    at org.sonarqube.gradle.AndroidUtils.configureForAndroid(AndroidUtils.java:67)
    at org.sonarqube.gradle.SonarQubePlugin.computeSonarProperties(SonarQubePlugin.java:401)
    at org.sonarqube.gradle.SonarQubePlugin.lambda$createTask$10(SonarQubePlugin.java:361)
    at org.gradle.util.GUtil.uncheckedCall(GUtil.java:432)
    at org.gradle.api.internal.ConventionAwareHelper$2.getValue(ConventionAwareHelper.java:87)
    at org.gradle.api.internal.ConventionAwareHelper$MappedPropertyImpl.getValue(ConventionAwareHelper.java:136)
    at org.gradle.api.internal.ConventionAwareHelper.getConventionValue(ConventionAwareHelper.java:114)
    at org.sonarqube.gradle.SonarQubeTask_Decorated.getProperties(Unknown Source)
    at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:73)
...

任何人都可以帮忙吗?

UPD:我不能使用 gradle 3+ 或 retrolambda 插件,因为它们与我们项目框架中使用的冲突。

UPD2:

找到临时解决方案 - 添加到 build.gradle:

sonarqube {
    androidVariant 'release'
}
4

0 回答 0