使用 gradle 和 kotlin DSL 配置 Jacoco

yod*_*mad 6 gradle jacoco gradle-plugin gradle-kotlin-dsl

我正在尝试配置 Jacoco 以从分析中排除某些类,但找不到任何工作示例:(

我找到了一些样本,afterEvaluate但没有成功

God*_*din 8

src/main/java/org/example/A.java

package org.example;

class A {
}
Run Code Online (Sandbox Code Playgroud)

src/main/java/org/example/B.java

package org.example;

class B {
}
Run Code Online (Sandbox Code Playgroud)

src/test/java/org/example/ExampleTest.java

package org.example;

public class ExampleTest {
  @org.junit.Test
  public void test() {
    new A();
    new B();
  }
}
Run Code Online (Sandbox Code Playgroud)

build.gradle.kts

plugins {
  java
  jacoco
}

repositories {
  mavenCentral()
}

dependencies {
  testCompile("junit:junit:4.12")
}
Run Code Online (Sandbox Code Playgroud)

使用 Gradle 5.4.1 执行gradle test jacocoTestReport产生以下报告

报告

除了之后 build.gradle.kts

tasks.withType<JacocoReport> {
  classDirectories.setFrom(
    sourceSets.main.get().output.asFileTree.matching {
      exclude("org/example/B.class")
    }
  )
}
Run Code Online (Sandbox Code Playgroud)

执行相同的命令会产生以下报告

排除后报告


Nar*_*pai 5

只是为了添加到@Godin 的精彩答案中:

@Godin 解释它的方式,你必须运行 gradle test jacocoTestReport这还不错,但是如果你想让 jacoco 在你运行时运行,只需gradle test将它添加到你的 build.gralde.kts 中:

tasks.test {
    finalizedBy("jacocoTestReport")
    doLast {
        println("View code coverage at:")
        println("file://$buildDir/reports/jacoco/test/html/index.html")
    }
}
Run Code Online (Sandbox Code Playgroud)


小智 5

我已经设法排除这种方式:

tasks.jacocoTestReport {
    classDirectories.setFrom(
        files(classDirectories.files.map {
            fileTree(it) {
                exclude(
                    "com/example/integration/**",
                    "com/example/application/*Ext*"
                )
            }
        })
    )
}
Run Code Online (Sandbox Code Playgroud)

取自这里