Java 为什么我的sonarqube在进行单元测试时提供0%的覆盖率?

Java 为什么我的sonarqube在进行单元测试时提供0%的覆盖率?,java,spring-boot,gradle,sonarqube,spring-test,Java,Spring Boot,Gradle,Sonarqube,Spring Test,所以我使用SonarQube来改进我的代码。问题是我一直得到0%的保险。我认为build.gradle文件不正确,但我不确定这是问题所在。有没有人能帮我检查一下build.gradle是否正确,如果这不是问题,我会继续查找其他问题 我的身材。格拉德尔: plugins { id 'org.springframework.boot' version '2.4.2' id 'io.spring.dependency-management' version '1.0.11.RELEAS

所以我使用SonarQube来改进我的代码。问题是我一直得到0%的保险。我认为build.gradle文件不正确,但我不确定这是问题所在。有没有人能帮我检查一下build.gradle是否正确,如果这不是问题,我会继续查找其他问题

我的身材。格拉德尔:

plugins {
    id 'org.springframework.boot' version '2.4.2'
    id 'io.spring.dependency-management' version '1.0.11.RELEASE'
    id 'java'
    id "org.sonarqube" version "3.2.0"
    id 'jacoco'
}

group = 'com.example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '15'

configurations {
    compileOnly {
        extendsFrom annotationProcessor
    }
}

repositories {
    mavenCentral()
}


dependencies {
    compile 'org.apache.httpcomponents:httpcore:4.4.1'
    compile 'org.apache.httpcomponents:httpclient:4.5'
    implementation('io.jsonwebtoken:jjwt:0.2')
    implementation 'org.springframework.boot:spring-boot-starter-mail'
    implementation 'org.springframework.boot:spring-boot-starter-security'
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
    implementation 'org.springframework.boot:spring-boot-starter-web'
    compile 'junit:junit:4.12'
    implementation 'org.modelmapper:modelmapper:2.4.1'
    compileOnly 'org.projectlombok:lombok'
    runtimeOnly 'mysql:mysql-connector-java'
    annotationProcessor 'org.projectlombok:lombok'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
    implementation 'org.eclipse.jgit:org.eclipse.jgit:5.4.2.201908231537-r'
    /**
     * JUnit jupiter with mockito.
     */
    testCompile group: 'org.mockito', name: 'mockito-junit-jupiter', version: '2.19.0'

    testCompile group: 'org.mockito', name: 'mockito-core', version: '2.19.0'
    testCompile group: 'org.springframework.security', name: 'spring-security-test', version: '5.1.6.RELEASE'
}

sonarqube{
    properties{
        property 'sonarjava.source', '1.8'
        property 'sonar.java.coveragePlugin', 'jacoco'
        property 'sonar.jacoco.reportPaths', 'build/reports/jacoco/test/jacocoTestReport.xml'
        property 'sonar.java.test.binaries'
    }
}
test {
    useJUnitPlatform()
}

提前谢谢

关键是SonarQube扫描仪必须知道jacoco数据文件的存放位置。基于属性的开发的普遍烦恼是,您不太可能看到错误消息说您没有设置正确的属性。这就是本案发生的情况


这在一定程度上取决于您使用的SonarQube的版本,但您设置的属性“sonar.jacoco.reportpath”从未指向jacoco XML文件。正确的属性是“sonar.coverage.jacoco.xmlReportPaths”。

在构建过程中,当Sonarqube执行其任务时,它通常会输出有关读取jacoco覆盖率报告的内容。上面说什么?它能找到报告吗?@WoutervanderLinde这是我的输出:此版本中使用了不推荐的Gradle功能,使其与Gradle 7.0不兼容。使用“--warning mode all”显示单个弃用警告。参见27s中的BUILD SUCCESSFUL 4 actionable tasks:1已执行,3最新当我尝试用您的代码行替换sonar.jacoco.ReportPath时,我得到以下错误:sonar.coverage.jacoco.xmlReportPath='BUILD/reports/jacoco/test/jacoctestreport.xml'找不到覆盖率报告。使用默认位置:target/site/jacoco/jacoco.xml、target/site/jacoco-it/jacoco.xml、build/reports/jacoco/test/jacocoTestReport.xml如果它说找不到该文件,那么您需要找出创建该文件的位置。我不能告诉你。属性需要指向其位置。