SonarQube 报告中 Kotlin 项目的覆盖率为 0%

2023-12-26

我正在设置通过 SonarQube 服务器分析项目。使用的工具集是:

  • 科特林 1.3.61
  • 摇篮6.0.1
  • 雅可可0.7.9
  • 声纳Qube 7.5
  • SonarQube Gradle 插件 2.7

问题是我在 SonarQube 中有 0.0% 的覆盖率,但是,同时我有格式良好的 jacoco 测试覆盖率报告。 这是来自的片段build.gradle.tks:

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

sonarqube {
    properties {
        property("sonar.host.url", "http://localhost:9000")
        property("sonar.sources", "src/main/")
        property("sonar.tests", "src/test/")
        property("sonar.exclusions", "src/generated/")
        property("sonar.jacoco.reportPath", "build/jacoco/test.exec")
        property("sonar.junit.reportsPath","build/test-results/test")
        property("sonar.core.codeCoveragePlugin","jacoco")
        property("sonar.verbose", "true")
        property("sonar.binaries" ,"build/classes/kotlin")
        property("sonar.java.binaries" ,"build/classes/java, build/classes/kotlin")
        property("sonar.dynamicAnalysis", "reuseReports")
    }
}

jacoco {
    toolVersion = "0.7.9"
    reportsDir = file("${project.projectDir}/build/reports")
}

tasks.named("sonarqube") {
    dependsOn(tasks.named("jacocoTestReport"))
}

我在执行期间有下一个日志条目./gradlew sonarqube --info:

任务:jacocoTestReport 删除过时的输出文件:/home/xxx/project/build/reports/test/html 不包括[] 任务 ':jacocoTestReport' 禁用缓存,因为: 构建缓存已禁用 任务“:jacocoTestReport”不是最新的,因为: 任务“:jacocoTestReport”的一项或多项附加操作已更改。

[ant:jacocoReport] 加载执行数据文件 /home/xxx/project/build/jacoco/test.exec

[ant:jacocoReport] 编写包含 43 个类的包“项目” 代码覆盖率报告:file:///home/xxx/project/build/reports/jacoco/test/html/index.html

:jacocoTestReport (Thread[Execution worker for ':',5,main]) 已完成。花了 0.398 秒。 :sonarqube (Thread[Execution worker for ':',5,main]) 启动。

And:

Task :sonarqube

Load global settings
Load global settings (done) | time=48ms
Server id: BF41A1F2-AW2xHg7ddKb9ks8-VzQt
User cache: /home/xxx/.sonar/cache
Load/download plugins
Load plugins index
Load plugins index (done) | time=41ms
Load/download plugins (done) | time=52ms
Loaded core extensions: 
Process project properties
Execute project builders
Execute project builders (done) | time=2ms
Load project repositories
Load project repositories (done) | time=41ms
Load quality profiles
Load quality profiles (done) | time=24ms
Load active rules
Load active rules (done) | time=2524ms
Load metrics repository
Load metrics repository (done) | time=50ms
Project key: project
Project base dir: /home/xxx/project

-------------  Scan project
Base dir: /home/xxx/project
Working dir: /home/xxx/project/build/sonar
Source paths: src/main
Test paths: src/test
Source encoding: UTF-8, default locale: en_US
Index files
Excluded sources: 
  src/generated/

33 files indexed
15/15 source files have been analyzed
1/1 source files have been analyzed
CPD calculation finished

> Task :sonarqube
0 files ignored because of inclusion/exclusion patterns
Quality profile for kotlin: Sonar way
Quality profile for xml: Sonar way

Sensor JaCoCo XML Report Importer [jacoco]
Sensor JaCoCo XML Report Importer [jacoco] (done) | time=2ms
Sensor Kotlin Sensor [kotlin]
15 source files to be analyzed

Sensor Kotlin Sensor [kotlin] (done) | time=551ms
Sensor SonarJavaXmlFileSensor [java]
1 source files to be analyzed
Sensor SonarJavaXmlFileSensor [java] (done) | time=18ms
Sensor XML Sensor [xml]
Metric 'comment_lines_data' is deprecated. Provided value is ignored.
Sensor XML Sensor [xml] (done) | time=100ms
Sensor Zero Coverage Sensor
Sensor Zero Coverage Sensor (done) | time=14ms
9 files had no CPD blocks
Calculating CPD for 6 files
Analysis report generated in 82ms, dir size=138 KB
Analysis reports compressed in 28ms, zip size=50 KB
Analysis report generated in /home/xxx/project/build/sonar/scanner-report
Analysis report uploaded in 64ms
ANALYSIS SUCCESSFUL, you can browse http://localhost:9000/dashboard?id=project

Task total time: 4.773 s
:sonarqube (Thread[Execution worker for ':',5,main]) completed. Took 5.206 secs.

配置出了什么问题?是不是漏掉了什么?

UPDATE:

另外,我在执行 gradle 任务后找到了下一个条目DEBUG mode:

[DEBUG] [org.sonarqube.gradle.SonarQubeTask] Sensors : JaCoCo XML Report Importer -> Kotlin Sensor -> SonarJavaXmlFileSensor -> XML Sensor -> Zero Coverage Sensor
[INFO]  [org.sonarqube.gradle.SonarQubeTask] Sensor JaCoCo XML Report Importer [jacoco]
[DEBUG] [org.sonarqube.gradle.SonarQubeTask] No reports found
[INFO]  [org.sonarqube.gradle.SonarQubeTask] Sensor JaCoCo XML Report Importer [jacoco] (done) | time=2ms 

嗯,终于找到这篇文章了:

  • 覆盖率测试数据导入 jacoco-coverage-report-in-xml-format https://community.sonarsource.com/t/coverage-test-data-importing-jacoco-coverage-report-in-xml-format/12151

因此,Sonar Java 分析器版本 5.12 不推荐使用 JaCoCo 的二进制格式(.exec 文件)导入覆盖范围。 这种二进制格式是 JaCoCo 项目的内部格式,因此不能保证向后兼容性,因此不应将其用于集成目的。

作为替代方案,Sonarqube 开发团队开发了 sonar-jacoco 插件,该插件导入 JaCoCo 的 XML 覆盖率报告,这是现在的首选。

因此,为了能够读取 Jacoco 测试覆盖率报告,我已将属性更改为:

property("sonar.jacoco.reportPath", "build/jacoco/test.exec")

To:

property("sonar.coverage.jacoco.xmlReportPaths", 
         "build/jacoco/test/jacocoTestReport.xml")

我还添加了条款:

reports {
    xml.isEnabled = true
}

To the jacocoTestReport梯度任务。

所以,现在我在 :sonarqube Gradle 任务执行日志中包含以下内容:

[DEBUG] [org.sonarqube.gradle.SonarQubeTask] 传感器:JaCoCo XML 报告导入器 -> Kotlin 传感器 -> SonarJavaXmlFileSensor -> XML 传感器 -> 零覆盖传感器 [INFO] [org.sonarqube.gradle.SonarQubeTask] 传感器 JaCoCo XML 报告导入器 [jacoco] [调试] [org.sonarqube.gradle.SonarQubeTask] 阅读报告 '/home/xxx/project/build/jacoco/test/jacocoTestReport.xml'

以及 SonarQube 报告中正确的测试覆盖率:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SonarQube 报告中 Kotlin 项目的覆盖率为 0% 的相关文章

随机推荐

  • boost::circular_buffer 相当于文件吗?

    我正在寻找一个允许在磁盘上获取循环缓冲区的库 在 Boost 中也有类似的东西 但它是一个基于内存的容器 循环缓冲区 http www boost org doc libs 1 57 0 doc html circular buffer h
  • 在 Linux 下启动时运行 ASP.NET Core 应用程序

    我想在 Linux 下运行我的 ASP NET Core 解决方案 并在启动时运行结果 来自微软docs https learn microsoft com en us aspnet core host and deploy linux n
  • CustomScrollView 内的 TabView

    用 SliverFillRemaining 包裹 TabBarView 像 Expanded 一样填充剩余的空白空间 会产生以下错误输出 flutter RenderPositionedBox 需要 RenderBox 类型的子代 但收到了
  • 编码为 base64 密钥库文件

    我想对我的 keystore 文件进行编码以在 Gitlab ci 中使用 因此 对于 Base64 编码 我运行以下命令 openssl base64 A in myFile keystore 对于解码 openssl base64 d
  • 如何为 TextView 中的文本更改添加动画效果?

    尝试执行以下操作 animTimeChange AnimationUtils loadAnimation this android R anim slide in left itemTime startAnimation animTimeC
  • 在单个剃刀视图中,如何检索从控制器的不同方法传递的值?

    我正在开发一个基本应用程序 这是主控制器 public ActionResult Index var all context mainz ToList var vm new mainViewModel main lst all return
  • 在 Excel 用户窗体中,如何更新标签的标题?

    我创建了我的第一个无模式UserForm在 Excel 中并在其上放置 ActiveX 标签 如何设置标签的标题 以便它显示其中的内容Sheet1 Range A1 并在单元格 A1 中的值发生变化时自行更新 基本上 我想要Userform
  • Haskell 集合可以保证每个操作的最坏情况范围?

    这种结构对于实时应用程序 例如用户界面 是必要的 用户并不关心单击按钮是否需要 0 1 秒或 0 2 秒 但他们确实关心第 100 次单击是否会强制执行出色的惰性计算并需要 10 秒才能继续 我在读冈崎的论文纯函数式数据结构 http ww
  • Python 在打印变量后打印文本

    所以我想在打印变量后打印一些文本 如下所示 print Blablabla var blablabla 现在看起来像这样 print The enemey gets hit for d damage 我想在打印损坏变量后打印 Hitpoin
  • ole32!COIDTable::ThreadCleanup 中崩溃 ... NetworkItemFactory!FDBackgroundThreadHandler

    自上周以来 Word 和 Excel 经常崩溃 即使是非常简单的文档也是如此 刚才 火狐也崩溃了 我该如何修复它或找到真正的根本原因 我已经使用安装程序修复了 Office 安装 应安装所有常规更新 笔记本电脑每天都会重新启动 我已经配置了
  • 在 IIS 上启用 SSI

    根据这一页 http msdn microsoft com en us library ms525940 28v vs 90 29 aspx 我应该能够 问 如何在 IIS7 上启用 SSI 编辑 哦 我明白我的问题是什么了 我在 VPS
  • git-diff:不考虑行顺序

    我的存储库中有一个由软件程序生成的文件 该程序有时会重新排序该文件上的行 这并不重要 因为行顺序并不重要 问题是 当执行 git diff 时 很难看出任何内容是否真正发生了变化 无论如何 是否有执行不考虑行顺序的差异 或者 如果 git
  • 如何在 Swift 中获取父 ViewController 的类名?

    有没有办法获取当前 子 父VC的类名UIViewController 我的 孩子 VC 推 有两个 父母 UIViewControllers 所以我想知道哪一位是当前的父母 这是一种方法 if let parentVC parent as
  • Vector3 的纬度和经度未在 3D 球体上对齐

    我正在尝试将纬度和经度转换为 Vector3 格式 对于给定的纬度和经度 我想将其转换为 Vector3 其中标记对象将位于此 Vector3 位置 这是我的代码 void createLand double latitude rad la
  • python中在函数中定义函数有什么好处?

    我遇到了这段python代码 粘贴在下面 effbot http effbot org zone re sub htm unescape html我想知道 为什么要在函数中定义函数 import re htmlentitydefs Remo
  • 为什么同步变更操作时还需要同步HashMap.get(key)?

    我用 get put and clear 多个线程对一个 HashMap 进行操作 put and clear 都在一个里面synchronized阻止但是 get 不是 我无法想象这会导致问题 但在我见过的其他代码中 get 几乎总是同步
  • 创建作业时如何指定 OpenShift 镜像

    在 OpenShift 3 3 下 我尝试使用以下命令创建作业oc命令行工具 显然缺乏对作业创建的基于参数的支持 但我无法理解如何使用现有应用程序的图像流 例如 当我的应用程序进行 S2I 构建时 它会推送到app latest图像流 我希
  • Firebase - 类型错误:路径必须是字符串。收到未定义

    我刚刚开始使用 firebase 我不确定 Firebase 的进出 根据我的模糊理解 我已经这样配置了我的应用程序 在主要Index js文件 我需要 const path require path const firebaseConfi
  • MEAN 堆栈 ng-upload-file

    我目前正在使用MEAN js创建一个应用程序 我脚手架一个简单的实体称为Campaign 我希望每个活动都有一张关联的图片 因此 我想改变CRUD接口能够上传一个文件到后端 我注射了ng 文件上传用于创建 FE 的插件Angular 上No
  • SonarQube 报告中 Kotlin 项目的覆盖率为 0%

    我正在设置通过 SonarQube 服务器分析项目 使用的工具集是 科特林 1 3 61 摇篮6 0 1 雅可可0 7 9 声纳Qube 7 5 SonarQube Gradle 插件 2 7 问题是我在 SonarQube 中有 0 0