Как использовать scoverage с настраиваемой конфигурацией зависимостей Gradle Flink shadowjar - PullRequest
0 голосов
/ 08 мая 2020

Сводка

У меня есть проект Gradle Flink Scala, и я пытаюсь добавить отчеты об охвате, но задача compileScoverageScala не может найти все зависимости из-за настраиваемой конфигурации теневого jar-файла.

build.gradle

Вот файл сборки, который следует примеру Gradle Flink. Единственная разница в том, что я пытался добавить Scoverage.

// Here are the plugins I'm using
plugins {
    id 'scala'
    id 'application'
    // shadow plugin to produce fat JARs
    id 'com.github.johnrengelman.shadow' version '5.2.0'
    id "org.scoverage" version "4.0.1"
    id "com.github.maiflai.scalatest" version "0.25"
}
...

// Here's the custom configuration used to build the shadow jar without including the main Flink libraries
configurations {
    flinkShadowJar // dependencies which go into the shadowJar

    // always exclude these (also from transitive dependencies) since they are provided by Flink
    flinkShadowJar.exclude group: 'org.apache.flink', module: 'force-shading'
    flinkShadowJar.exclude group: 'com.google.code.findbugs', module: 'jsr305'
    flinkShadowJar.exclude group: 'org.slf4j'
    flinkShadowJar.exclude group: 'log4j'
}
...

// Here's where the custom configuration is added to the classpath, Scoverage isn't picking these up.
sourceSets {
    main.compileClasspath += configurations.flinkShadowJar
    main.runtimeClasspath += configurations.flinkShadowJar

    test.compileClasspath += configurations.flinkShadowJar
    test.runtimeClasspath += configurations.flinkShadowJar

    javadoc.classpath += configurations.flinkShadowJar
}

Вот результат сборки:

$ ./gradlew clean build

> Task :compileScala
Pruning sources from previous analysis, due to incompatible CompileSetup.

> Task :compileScoverageScala FAILED
Pruning sources from previous analysis, due to incompatible CompileSetup.
/Users/david.perkins/dev/wffh/flink-validation-fhir/src/main/scala/com/ibm/watson/health/foundation/hri/flink/FhirValidationJob.scala:6: object core is not a member of package com.ibm.watson.health.foundation.hri.flink
import com.ibm.watson.health.foundation.hri.flink.core.BaseValidationJob
                                                  ^

Отсутствующий пакет объявлен как flinkShadowJar зависимость. Задача compileScala может его найти, а compileScoverageScala не может.

Кто-нибудь знает, есть ли способ явно указать Scoverage включить конфигурацию flinkShadowJar? Я надеюсь, что другие, использующие Flink, сталкивались с этим раньше и знают, как это исправить.

1 Ответ

0 голосов
/ 27 мая 2020

Мне немного помогла команда Scoverage: https://github.com/scoverage/gradle-scoverage/issues/138

Добавление этого в мою декларацию sourceSets исправило его.

    scoverage.compileClasspath += configurations.flinkShadowJar
    scoverage.runtimeClasspath += configurations.flinkShadowJar
...