是否可以与Sonarqube分析Android Kotlin代码覆盖



我配置了一个jenkins项目,在Gradle构建和测试后,它称为"执行Sonarqube Scanner",其规格:

sonar.projectKey=my_project_key
sonar.projectName=my_Android
sonar.projectVersion=1.0
sonar.sources=app/src
sonar.java.binaries=app/build/intermediates/classes/debug
sonar.coverage.exclusions=app/src/test/**,app/src/androidTest/**,app/src/main/res/**

这成功运行了Sonarqube,并向iPaddress生成了一份报告:9000衡量的:错误,漏洞,债务,代码气味和重复,就像应该一样。但是,本报告中没有任何位置定义测试所涵盖的代码。Sonarqube成功运行了Kotlin插件,并看到了代码库本身,但没有确定覆盖范围。使用Kotlin Android时,可以使用Sonarqube收集此信息?

我确实尝试过安装jacoco,但没有在Sonarqube结果上看到任何新数据。

您可以在此处安装第三方的声纳插件,该插件将测量Kotlin项目的代码质量。不幸的是,在此发布时,Sonarqube没有自己的插件。

设置后,请在此处查看以设置Gradle和Sonar-Project.properties。该帖子有点过时,但包含指向更新版本的链接,仍然是一个很好的起点。

tl; dr for#2:Sonarqube的信息Sonarqube需求位于2个位置。一个已经由OP确定。另一个位于app/build/tmp/kotlin-classes

如果您使用的是gradle和jacoco。您可以使用xmlReportPaths使用Jacoco进行代码覆盖。使用该声纳将信任Jacoco的输出。

sonarqube {
    properties {
        property("sonar.java.coveragePlugin", "jacoco")
        property("sonar.coverage.jacoco.xmlReportPaths", "./build/reports/jacoco/test/jacocoTestReport.xml")
    }
}

Sonar Jacoco插件的文档。它还可以与混合源代码(Java,Kotlin)一起使用。

我放弃了在发布问题后不久用声纳获得Kotlin代码覆盖范围。

但是,,我有很多项目可以与Java和Jacoco一起工作。

回顾性回顾一下我的sonar.properties文件,我可能能够通过将以下行添加到Sonar.properties文件:

来引用jacoco任务的输出来解决此问题:
sonar.jacoco.reportPath=build/jacoco/test.exec

我不确定这是否与Kotlin一起使用,但是它可以帮助使用Java覆盖范围并解决了我的用例。

Sonarqube(6 )的新版本现在支持Kotlin,并且不需要项目中的任何自定义配置。

只需确保安装Kotlin和Jacoco插件,它应该只适合您。


---旧答案----------------------------------------------------

我的项目正在使用jacoco生成覆盖范围报告。要让Sonarqube接收结果,请尝试设置以下内容:

sonar.java.binaries={$buildDir}/classes/kotlin 

换句话说,让Sonarqube知道Kotlin类文件在哪里。

此配置假定 100% Kotlin项目。如果您的项目是Java和Kotlin的组合,则必须确定如何配置两个目录。

最新更新