Как определить агрегацию отчетов Jacoco в Gradle Kotlin DSL?

В Gradle Groovy я использовал

task jacocoRootReport(type: JacocoReport) {
  dependsOn = subprojects.test

  subprojects.each {
    sourceSets it.sourceSets.main
  }

  executionData.from fileTree(project.rootDir.absolutePath).include("**/build/jacoco/*.exec")

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

но я понятия не имею, как перевести его на Kotlin DSL, чтобы результаты Jacoco из подпроектов собирались в один отчет в корневом проекте.


person delor    schedule 28.11.2018    source источник


Ответы (2)


Я бы предложил настроить и использовать существующую задачу jacocoTestReport, поскольку для нее уже есть предопределенные исходные наборы.

Минимальные изменения, которые мне пришлось сделать, это добавить:

tasks.jacocoTestReport {
    reports {
        xml.isEnabled = true
    }
    dependsOn(allprojects.map { it.tasks.named<Test>("test") })
}

и отчет был создан в build\reports\jacoco\test\jacocoTestReport.xml.


Если вам действительно нужно определить собственную задачу, вы можете агрегировать исходные наборы так же, как это делает jacocoTestReport задача:

sourceSets(project.extensions.getByType(SourceSetContainer::class.java).getByName("main")) 

gradle-6.2\src\jacoco\org\gradle\testing\jacoco\plugins\JacocoPlugin.java#addDefaultReportTask)

Окончательный код может выглядеть так:

tasks.register<JacocoReport>("codeCoverageReport") {

    executionData(fileTree(project.rootDir.absolutePath).include("**/build/jacoco/*.exec"))

    sourceSets(project.extensions.getByType(SourceSetContainer::class.java).getByName("main"))

    reports {
        xml.isEnabled = true
        xml.destination = File("${buildDir}/reports/jacoco/report.xml")
        html.isEnabled = false
        csv.isEnabled = false
    }

    dependsOn(allprojects.map { it.tasks.named<Test>("test") })
}
person Antimonit    schedule 29.03.2020

Ответ есть в официальной документации https://docs.gradle.org/current/userguide/jacoco_plugin.html

tasks.jacocoTestReport {
    reports {
        xml.isEnabled = false
        csv.isEnabled = false
        html.destination = file("${buildDir}/jacocoHtml")
    }
}
person teur    schedule 01.12.2018
comment
Мне нужна задача, которая объединяет результаты тестового покрытия из подпроектов. Это решение не делает этого. - person delor; 03.12.2018