当前位置: 首页 > 知识库问答 >
问题:

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

尉迟龙光
2023-03-14

我正在IntellijJavaIDE中运行一个Gradle构建。SonarQube runner Gradle插件与JaCoCo Gradle插件一起使用。

问题:我收到消息没有关于每个测试覆盖率的信息 ,(不是本文的副本,请参见下文),覆盖范围显示在SonarQube中,但仅作为总体百分比,而不是每个文件的详细报告:

我做错什么了吗?它可能是SonarQube中的错误吗(就像最近Cobertura一样)?

这是我的身材。格拉德尔:

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,则执行一个JaCoCo测试。创建和处理exec文件:

<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

这篇文章建议设置声纳。测试,我尝试过,但没有效果。日志文件显示检测到测试源和二进制文件位于正确的位置。

FWIW,我使用相同的设置与Maven构建和它的工作。不过这里不能用马文。

版本号:

  • SonarQube 4.3
  • SonarQubeJava生态系统2.2.1
  • Gradle 1.12(也: 1.11)
  • IntelliJ IDEA终极13.1.3
  • Java1.7

下面是完整的测试项目供下载,还有完整的日志。


共有1个答案

伯俊弼
2023-03-14

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

即使你们有100%的课程覆盖率,你们也可以通过在声纳搜索框(右上角)中搜索来查看这个课程覆盖率。

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

见我的常见问题

顺便说一下,你修改过的版本。我的声纳的渐变(此/不适用于我):

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"
    }
}
 类似资料:
  • 我尝试在我的应用程序模块中的代码的AndroidKotlin应用程序的声纳Qube中显示测试覆盖范围。我可以生成雅各的覆盖结果并显示声纳Qube分度仪,但问题是测试覆盖范围未显示在声纳Qube中: https://imgur.com/a/xOjxLl1 在我的项目的build.gradle中,我有: 在我的身体里。我的应用程序模块的gradle 我生成我的Jacoco报告: 并使用:生成我的son

  • 我的sonarqube服务器版本8.3.1启用了cobertura插件来显示cobertura覆盖报告。现在我想报告Jacoco XML覆盖数据(使用gradle Jacoco插件生成),但它不起作用。cobertura和Jacoco之间是否存在任何已知问题?或者两种机制都应该在一个sonarqube上工作?

  • 我有一个用Lombok的@Data注释的类,在一个gradle项目中,使用Sonarqube和Jacoco插件。 源代码可在 github 上找到 我有一个本地运行的sonarqube服务器作为docker容器运行,开始如下: 我添加了一个“lombok.config”文件,要求它添加@lombok。根据文档中的“全局配置键”部分,为其生成的代码生成注释。 我有以下声纳状态配置。 当我第一次运行s

  • 父级pom.xml中的jacoco配置: 父级pom.xml中的绝对配置:

  • Jacoco插件在jenkins报告中显示0%的覆盖率,但当我在本地系统中运行相同的命令时,Jacoco会正确生成报告。我正在使用以下命令: mvn-s xyz/settings.xml-f xyz/xyz/pom.xml清洁安装org.jacoco 所以当我在jenkins中运行这个命令时,它会生成错误的报告。我已经检查了它在工作区目录对应的项目在詹金斯。它显示每个项目的0%覆盖率。但是当我在本