Исключения, не работающие с плагином Jacoco Gradle

Я работаю над настройкой плагина Jacoco Gradle для своего проекта. Плагин работает нормально и генерирует отчет о покрытии, но он не исключает пакеты, которые я бы исключил.

Классы, которые я хотел бы включить, находятся в com/xxx/ws/hn/**, а классы, которые я хотел бы исключить, находятся в com/xxx/ws/enterprise/**.

Вот мой скрипт Gradle:

apply plugin: "jacoco"

jacoco {
    toolVersion = "0.6.2.201302030002"
    reportsDir = file("$buildDir/reports/jacoco")
}

test {
    jacoco{
        excludes = ["com/xx/ws/enterprise/**/*"]
        includes = ["com/xxx/ws/hn/**/*"]
        append = false
    }
}

jacocoTestReport {
    dependsOn test
    description = "Generate Jacoco coverage reports after running tests."
    executionData = files('build/jacoco/test.exec')
    reports {
        xml.enabled true
        html.enabled true
    }
}

Я что-то пропустил здесь? Я пробовал различные шаблоны исключений, включая '.' разделитель для пакетов вместо «/», но ничего не работает. Любая помощь будет принята с благодарностью.


person ntaylor2    schedule 05.11.2013    source источник


Ответы (2)


Я не проверял это, но когда я прочитал документацию JaCoCo, в ней говорится, что можно использовать подстановочные знаки, но во всех примерах есть только ОДИН *, а не два, как показывает ваш пример.

http://www.eclemma.org/jacoco/trunk/doc/agent.html

person Joachim Nilsson    schedule 21.02.2014

Чтобы закрепить (и проверить) ответ Иоахима, я наткнулся на этот пост SO и обнаружил, что указание канонических имен классов, стиля пути к классам (с косой чертой, а не точками) с одиночными подстановочными знаками действительно работает хорошо. Например, вот мой список исключений, который работает в моей сборке, определенный как список в отдельном файле gradle:

def testExcl = [
    'android/*',
    'com/android/*',
    'com/nativelibs4java/*',
    'com/ochafik/*',
    'com/fasterxml/*',
    'com/esotericsoftware/*',
    'com/google/*',
    'com/lmax/*',
    'com/sun/*',
    'jdk/*',
    'mockit/*',
    'org/apache/*',
    'org/bridj/*',
    'org/gradle/*',
    'org/hamcrest/*',
    'org/junit/*',
    'org/slf4j/*',
    'sun/*',
    'worker/*',
    '*Test',
    '*TestIntegration',
    '*AllTests',
    '*Suite'
]

Я пробовал, наверное, 10 или 12 других способов форматирования имен классов, и это единственный способ, который действительно работал. Я не знаю, почему что-то подобное, настолько простое/фундаментальное, настолько недоступно для Google и трудно найти окончательный ответ в контексте Gradle (то есть вне официальной документации JaCoCo, где нет документации об интеграции Gradle, но Ant и Maven документы по интеграции есть).

Надеюсь, это поможет, если другие будут пытаться заставить JaCoCo исключить классы.

person jhyry-gcpud    schedule 19.05.2021