SonarQube 不会通过 Gradle 显示每个文件的完全覆盖类的详细报告

2024-07-04

我正在 IntelliJ Java IDE 中运行 Gradle 构建。这SonarQube 跑步者 http://www.gradle.org/docs/current/userguide/sonar_runner_plugin.htmlGradle 插件与JaCoCo http://www.gradle.org/docs/current/userguide/jacoco_plugin.html摇篮插件。

Problem:我收到消息No information about coverage per test., (not的副本这个帖子 https://stackoverflow.com/questions/16615558/no-information-about-coverage-per-test-from-sonar-with-jacoco-ant-build,见下文)并且覆盖率显示在 SonarQube 中,但仅作为总体百分比,而不是每个文件的详细报告:

难道我做错了什么?也许是 SonarQube 中的一个错误(因为它是与科贝尔图拉 https://jira.codehaus.org/browse/SONARPLUGINS-3711最近)?

这是我的 build.gradle:

repositories {
    mavenCentral()
}

apply plugin: 'java'
apply plugin: 'jacoco'
apply plugin: 'sonar-runner'

sourceCompatibility = 1.7
project.version = '1.0'
project.group = 'com.acme.sandbox'
project.description = 'just a test project'

dependencies {
    testCompile group: 'junit', name: 'junit', version: '4.11'
}

// JaCoCo test coverage configuration
tasks.withType(Test) { task ->
    jacoco {
        append = false
    }
}

// Sonar configuration
sonarRunner {
  sonarProperties {
    property 'sonar.host.url', 'http://host:port'
    property 'sonar.jdbc.url', 'myJdbcURL'
    property 'sonar.jdbc.username', 'dbuser'
    property 'sonar.jdbc.password', 'dbpass'
    property 'sonar.login', 'builduser'
    property 'sonar.password', 'buildpass'

    property 'sonar.profile', 'profilename'
    property 'sonar.branch', 'DEV'
    property 'sonar.language', 'java'
    property 'sonar.sourceEncoding', 'UTF-8'
    property 'sonar.verbose', 'true'
    //property 'sonar.tests', "$projectDir\\src\\test\\java"
    //property 'sonar.binaries', "${buildDir}\\classes\\main,${buildDir}\\classes\\test"

    //property 'sonar.java.coveragePlugin', 'jacoco'
    property 'sonar.jacoco.reportPath', "${buildDir}\\jacoco\\test.exec"
    property 'sonar.junit.reportsPath', "${buildDir}\\test-results"
  }
}

现在如果你执行clean, 其次是sonarRunner, 一个雅可可测试执行程序文件被创建并处理:

<snip>
18:35:27.705 DEBUG - Initializers : 
18:35:27.706 INFO  - Base dir: D:\path\to\JaCoCoTest
18:35:27.706 INFO  - Working dir: D:\path\to\JaCoCoTest\build\sonar
18:35:27.707 INFO  - Source dirs: D:\path\to\JaCoCoTest\src\main\java
18:35:27.708 INFO  - Test dirs: D:\path\to\JaCoCoTest\src\test\java
18:35:27.708 INFO  - Binary dirs: D:\path\to\JaCoCoTest\build\classes\main
<snip>
18:35:27.931 INFO  - JaCoCo IT report not found.
18:35:27.933 INFO  - JaCoCo reports not found.
18:35:27.938 DEBUG - Sensors : JavaSquidSensor -> QProfileSensor -> FindbugsSensor -> CpdSensor -> PmdSensor -> SurefireSensor -> CheckstyleSensor -> InitialOpenIssuesSensor -> ProfileEventsSensor -> ProjectLinksSensor -> VersionEventsSensor -> FileHashSensor -> JaCoCoSensor
<snip>
18:35:34.055 INFO  - Sensor SurefireSensor...
18:35:34.056 INFO  - parsing D:\path\to\JaCoCoTest\build\test-results
18:35:34.116 INFO  - Sensor SurefireSensor done: 61 ms
<snip>
18:35:34.936 INFO  - Sensor JaCoCoSensor...
18:35:34.939 INFO  - Analysing D:\path\to\JaCoCoTest\build\jacoco\test.exec
18:35:35.027 INFO  - No information about coverage per test.
18:35:35.028 INFO  - Sensor JaCoCoSensor done: 92 ms

这个帖子 https://stackoverflow.com/questions/16615558/no-information-about-coverage-per-test-from-sonar-with-jacoco-ant-build建议设置sonar.tests,我已经尝试过但没有效果。日志文件显示检测到测试源和二进制文件位于正确的位置。

FWIW,我在 Maven 构建中使用了相同的设置,并且它有效。但这里不能使用 Maven。

版本号:

  • 声纳Qube 4.3
  • SonarQube Java 生态系统 2.2.1
  • Gradle 1.12(也:1.11)
  • IntelliJ IDEA 旗舰版 13.1.3
  • Java 1.7

这里是完整的测试项目 http://53327882.de.strato-hosting.eu/posted/so/JaCoCoTest.zip供下载,以及full log http://53327882.de.strato-hosting.eu/posted/so/JaCoCoTest-SonarRunner.log.


这就是所谓的“想要的”行为。声纳不显示 100% 覆盖率的类别。在您的项目中,您有一个类完全被测试覆盖,所以没有什么可显示的。

FYI:

即使您有 100% 覆盖类别,您也可以通过在声纳搜索框(右上角)中搜索来查看该类别覆盖范围。


如果你看到.exec并且它的大小很有价值,那么您已经收集了覆盖数据。

See my FAQ https://stackoverflow.com/a/23830837/2555999

I got this code analysis widget for your project:enter image description here

And finally after I added another method uncovered by tests and test coverage dropped to 80%: enter image description here

I got what you need - coverage by line:enter image description here

顺便说一句,你修改过的构建.gradle对于我的声纳(这个//对我不起作用):

repositories {
    mavenCentral()
}

apply plugin: 'java'
apply plugin: 'jacoco'
apply plugin: 'sonar-runner'


sourceCompatibility = 1.7
project.version = '1.0'
project.group = 'com.acme.sandbox'
project.description = 'just a test project'

dependencies {
    testCompile group: 'junit', name: 'junit', version: '4.11'
}

// JaCoCo test coverage configuration
tasks.withType(Test) { task ->
    jacoco {
        append = false
    }
}

// Sonar configuration
sonarRunner {
    sonarProperties {
        // general information about the SonarQube server
        property 'sonar.host.url', 'http://localhost:9000'
        property 'sonar.jdbc.url', 'jdbc:h2:tcp://localhost:9092/sonar'
        property 'sonar.jdbc.validationQuery', 'select 1'
        property 'sonar.jdbc.driverClassName', 'org.hibernate.dialect.H2Dialect'
        property 'sonar.jdbc.password', 'sonar'
        property 'sonar.jdbc.password', 'sonar'
        property 'sonar.login', 'jenkins'
        property 'sonar.password', 'jenkins'

        // information about this project
        //property 'sonar.profile', 'profilename'
        property 'sonar.branch', 'DEV'
        property 'sonar.language', 'java'
        property 'sonar.sourceEncoding', 'UTF-8'
        property 'sonar.verbose', 'true'
        //property 'sonar.tests', "$projectDir\\src\\test\\java"
        property 'sonar.binaries', "${buildDir}/classes/main/"

        // execute JaCoCo before the SonarQube run to have report file ready
        //property 'sonar.java.coveragePlugin', 'jacoco'
        property 'sonar.jacoco.reportPath', "${buildDir}/jacoco/test.exec"
        property 'sonar.junit.reportsPath', "${buildDir}/test-results"
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SonarQube 不会通过 Gradle 显示每个文件的完全覆盖类的详细报告 的相关文章

随机推荐

  • 匿名类是内部类的子集吗?

    这听起来可能是一个愚蠢的问题 但所有匿名类都必须在现有类中定义和实例化 因此 它们必须同时是内部类 匿名类是内部类的类型 看http docs oracle com javase tutorial java javaOO innerclas
  • RestKit:如何获取简单的 JSON 字符串数组?

    我应该如何使用 RestKit 来获取像这样的 JSON 字符串数组 Paris London Brussels New York 我尝试进行对象映射 但由于没有关键路径或属性 我不知道要映射什么 我什至不需要映射 结果可能只是一个数组或字
  • 如何连接 COM 事件调度程序?

    VBIDE API 揭示了令人惊奇的神秘之处 dispVBComponentsEvents接口 除其他外 其中看起来像我可以用它来捕获 VBE 中各种有趣的事件 因此 我在一个类中实现了该接口 该类旨在捕获事件并引发 正常 net 事件以供
  • awk 变量赋值语句需要解释

    好吧 言归正传 这是代码 我对代码进行了一些格式化以便于阅读 awk t 0 0 t 0 print 0 value of 0 is 0 0 t 0 print 0 value of 0 is 0 0 t 0 print 0 value o
  • Shell 脚本在延迟后生成进程

    如何在 shell 脚本延迟后生成进程 我希望命令在脚本启动 60 秒后启动 但我想继续运行脚本的其余部分 而不先等待 60 秒 想法是这样的 bin sh Echo A 60 seconds later but without block
  • 使用 Appium 和 Ruby 测试 iOS 应用程序时等待元素加载?

    我正在测试一个iOS应用程序 登录后无法与元素交互 因为Appium运行得太快了 有人可以给我指出一个使用 WebDriverWait 风格等待 Appium iOS 测试的示例吗 最好用红宝石 Thanks 这对我有用 但我是 Appiu
  • 在 TextInputLayout 中显示密码图标触及基线

    I had some problem with my show password icon in TextInputLayout with android inputType textPassword Right now it is sho
  • 终极Java版本表(J2EE、Java EE、Servlet、JSP、JSTL)

    我正在寻找 Java EE 或以前称为 J2EE 和 Java SE 的组件分解 E g J2EE 1 3 Servlet 2 3 JSP 1 2 JSTL 1 0 J2EE 1 4 Servlet 2 4 JSP 2 0 JSTL 1 1
  • 如何在切换到 vim 正常模式时自动更改键盘布局?

    有时我使用 vim 编写非美国文本 当我想在正常模式下使用任何命令时 我需要将布局更改为美国 可以自动做到这一点吗 附言 我可以像这样进行映射this http www vim org scripts script php script i
  • id 是 python 中的关键字吗?

    我的编辑器 TextMate 显示id使用与我常用的变量名称不同的颜色 当用作变量名称时 是关键字吗 我不想遮蔽任何关键字 id不是一个keyword在Python中 但它是一个的名字内置功能 http docs python org li
  • 迁移到新 csproj 格式的 WPF 应用程序上未定义 RunCommand 属性

    我正在尝试将旧 csproj 格式构建的 WPF 应用程序迁移到为 VS2017 定义的新 csproj 格式 我已经能够编译该应用程序 但是当我尝试在 VS2017 下的调试器中启动它时 我收到以下错误消息 无法运行您的项目 未定义 Ru
  • 如何将node.js应用程序转换为cordova

    我们建造了一个node js适用于台式机和平板电脑的应用程序 它是完全基于网络的应用程序 现在我计划在中实现与本机应用程序相同的应用程序android using Apache cordova 在项目目录下 我们有node modules
  • 相对于当前日期对 Java 集合进行排序

    我想相对于当前日期对日期列表进行排序 例如列表中有下一项 10 01 2018 10 20 2018 10 14 2018 10 02 2018 当前日期是10 08 2018 结果应该是按下一个顺序升序排列的数组 10 14 2018 1
  • 基本镜面着色

    我正在使用一个生成阴影球体的简单代码 我还没有完全理解数学 但我在玩代码时正在弄清楚它 我想知道如何根据这段代码实现镜面反射着色 有什么建议么 for y 0 y
  • 根据所选付款方式更改 WooCommerce 提交结帐按钮文本

    I tried 更改 WooCommerce 中特定付款方式的结帐提交按钮文本 https stackoverflow com questions 45739331 change checkout submit button text fo
  • woocommerce 电子邮件通知中的 get_post_meta

    我试图从 woocommerce 电子邮件模板中的订单获取一些数据 但 get post meta 只是返回 false 此代码适用于感谢页面 我在这上面花了太多时间 任何帮助 将不胜感激 谢谢 global post echo test
  • 有没有可靠的方法在 IE11 中使用 ctx.drawImage() ?

    我有一个脚本 可以根据数据查询创建动态 SVG 图形 我需要将它们粘贴到 PDF 中 为此我使用 jsPDF 不幸的是 jsPDF 自己的 addSVG 似乎不起作用 所以我花了一些时间尝试使用画布将 SVG 转换为 PNG 我似乎可以将
  • “部署到多个环境”的 Firebase Functions 版本

    正如这里所建议的 https firebase googleblog com 2016 07 deploy to multiple environments with html https firebase googleblog com 2
  • 删除超过 7 天的文件

    我看过一些帖子删除特定文件夹中的所有文件 不是文件夹 但我根本不明白它们 我需要使用 UNC 路径并删除所有超过 7 天的文件 Mypath files data APIArchiveFolder 有人有快速脚本 可以专门输入上面的路径来删
  • SonarQube 不会通过 Gradle 显示每个文件的完全覆盖类的详细报告

    我正在 IntelliJ Java IDE 中运行 Gradle 构建 这SonarQube 跑步者 http www gradle org docs current userguide sonar runner plugin htmlGr