Gradle Jacoco插件不生成报告

qzlgjiam  于 2022-11-14  发布在  其他
关注(0)|答案(3)|浏览(320)

Java 8和Gradle 4.6。我正在尝试配置我的Gradle版本以使用Jacoco Plugin,但遇到了一些困难。我已经让它与Checkstyle和Findbugs一起工作,因此运行./gradlew clean build会调用Checkstyle和Findbugs任务,因为它们是check任务的依赖项。
我现在正在努力让Jacoco工作,这样:
1.它排除了我的com.me.myapp.domain.model包及其所有内容;和
1.如果非排除类上的代码覆盖福尔斯低于70%,我的构建将失败;和
1.无论通过还是失败,我都希望在build/目录下生成一个HTML版本的Jacoco报告;和
1.理想情况下我可以只使用./gradlew clean build的相同Gradle命令调用来让Jacoco像这样工作
我目前最好的尝试:

plugins {
    id 'java-library'
    id 'checkstyle'
    id 'findbugs'
    id 'jacoco'
}

dependencies {
    compile(
        'org.hibernate:hibernate-core:5.0.12.Final'
        ,'com.fasterxml.jackson.core:jackson-core:2.8.10'
        ,'com.fasterxml.jackson.core:jackson-databind:2.8.10'
        ,'com.fasterxml.jackson.core:jackson-annotations:2.8.0'
    )

    testCompile(
        'junit:junit:4.12'
    )
}

repositories {
    jcenter()
    mavenCentral()
}

checkstyle {
    config = rootProject.resources.text.fromFile('buildConfig/checkstyle/checkstyle.xml')
    toolVersion = '8.11'
}

tasks.withType(FindBugs) {
    reports {
        xml.enabled false
        html.enabled true
    }
}

findbugs {
    excludeFilter = file('buildConfig/findbugs/findbugs-exclude.xml')
}

jacocoTestReport {
    reports {
        xml.enabled false
        csv.enabled false
        html.enabled true
    }

    afterEvaluate {
        classDirectories = files(classDirectories.files.collect {
            fileTree(dir: it,
                exclude: [
                    'com/me/myapp/domain/model/**'
                ]
            )
        })
    }
}

jacocoTestCoverageVerification {
    violationRules {
        rule {
            limit {
                minimum = 0.7
            }

            failOnViolation true
        }
    }
}

jacoco {
    toolVersion = "0.8.1"
}

// to run coverage verification during the build (and fail when appropriate)
check.dependsOn jacocoTestCoverageVerification

当我用上面的build.gradle运行./gradlew clean build时(^^^),如果我的覆盖率低于70%,Jacoco**会 * 使构建失败。**但是,**它不会为我生成任何HTML报告,这对修复它一点帮助都没有。
"有什么想法吗"

yx2lnoni

yx2lnoni1#

请注意,Gradle Jacoco插件提供两个完全不相关的功能:

如果插件与Java插件一起应用,则会创建上面提到的每种类型的任务,即jacocoTestReportjacocoTestCoverageVerification。从名称可以看出,它们都与test任务相关联。
但是,这些任务都不会自动包含在常规Gradle build生命周期中。不包含报告任务的原因很简单,因为实际构建实际软件时不需要报告任务。javadoc任务不包括在build生命周期中(在创建javadoc jar时可能会出现这种情况)。不包含验证任务的原因比较复杂,但我们只引用以下文档:
JacocoCoverageVerification任务不是Java插件提供的check任务的任务依赖项。这是有充分理由的。该任务当前不是增量的,因为它没有声明任何输出。任何违反声明规则的行为都将自动导致在执行检查任务时生成失败。这种行为可能不是所有用户都希望看到的。Gradle的未来版本可能会更改该行为。
您已经通过将check.dependsOn jacocoTestCoverageVerification添加到生成文件中解决了此问题。这样,将对每个生成检查代码覆盖率(如果覆盖率不足,则会失败)。现在,您希望在所有生成中生成报告,即使它由于代码覆盖率不足而失败。您需要确保在生成可能失败之前生成报告。您可以用途:

jacocoTestCoverageVerification.dependsOn jacocoTestReport
ffscu2ro

ffscu2ro2#

从docu https://docs.gradle.org/current/userguide/jacoco_plugin.html HTML报告默认启用。所以没有必要把html.enabled放在配置中。同时,docu显示了如何指定目标文件夹。你可以尝试把它设置到某个已知的文件夹来检查它是否工作。例如html.destination file("${buildDir}/jacocoHtml")。HTML报告应该结束的默认报告目录是$buildDir/reports/jacoco/test将Jacoco报告目录设置为某个显式值也有助于识别任何配置问题reportsDir

ecfdbz9o

ecfdbz9o3#

我甚至在我的本地终端gradle上执行了以下命令--stacktrace -Dtest.ignoreFailures=true --DtestMaxParallelForks=1 -DtestForkEvery=1 -PstrictTestThresholds=true --Pjava.warnings.hide:reporting:test:reporting:jacocoTestReport -x:scala-lib:test

相关问题