Проблема:
У меня есть проект с жакоко и я хочу иметь возможность фильтровать определенные классы и / или пакеты.
Связанная документация:
Я прочитал следующую документацию:
Официальный жакокосайт: http://www.eclemma.org/jacoco/index.html
Официальный жакоко документы для Gradle: https://gradle.org/docs/current/userguide/jacoco_plugin.html
Официальный жакоко Github
проблемы, работающие над покрытием:
https://github.com/jacoco/jacoco/wiki/FilteringOptions
https://github.com/jacoco/jacoco/issues/14
Связанные ссылки на StackOverflow:
JaCoCo & Gradle - Параметры фильтрации (Нет ответа)
Исключить пакеты из отчета Jacoco с помощью Sonarrunner и Gradle (не использоватьсонар)
JaCoCo - исключить JSP из отчета (похоже, работает дляmaven, Я использую Gradle)
Конфигурация Maven Jacoco - исключить классы / пакеты из отчета, который не работает (похоже, работает дляmaven, Я использую Gradle)
Плагин JaCoCo gradle exclude (не удалось заставить это работать)
Gradle Jacoco - отчеты о покрытии включают классы, исключенные в конфигурации (похоже, очень близко, он использовал doFirst
, у меня не работал)
Пример того, что я пробовал:
apply plugin: 'java'
apply plugin: 'jacoco'
buildscript {
repositories {
mavenCentral()
jcenter()
}
}
repositories {
jcenter()
}
jacocoTestReport {
reports {
xml {
enabled true // coveralls plugin depends on xml format report
}
html {
enabled true
}
}
test {
jacoco {
destinationFile = file("$buildDir/jacoco/jacocoTest.exec")
classDumpFile = file("$buildDir/jacoco/classpathdumps")
excludes = ["projecteuler/**"] // <-- does not work
// excludes = ["projecteuler"]
}
}
}
Вопрос:
Как я могу исключить определенные пакеты и классы при создании жакоко отчеты о покрытии?
источник
packages
онлайн с помощьюCodecov
? Также я видел тоGithub
, что насчетAndroid
поддержки, я виделJava
. Мне все равно придется отправлять вам все отчеты, а затем фильтровать после и фильтровать раньше.excludes
из официальной документации на самом деле делать то? Это бесполезно?excludes
не в задаче покрытия, а в тестовой задаче. Он исключает обработку файлов JaCoCo и, таким образом, запись покрытия. Вы можете использовать это, если вы не хотите записывать покрытие для некоторых классов, если вы не можете этого сделать из-за конфликта с другим инструментальным агентом или из-за того, что вы предварительно инструментировали классы. Это не исключает класс из отчета, особенно в последнем упомянутом случае, это было бы ужасной идеей.Ответы:
Спасибо
Yannick Welsch
:После поиска в Google, чтения документов Gradle и просмотра более старых сообщений StackOverflow я нашел этот ответ на официальном сайте. Gradle форумы!
Источник: https://issues.gradle.org/browse/GRADLE-2955
Решение для моих
build.gradle
проектов Java / Groovy:Как видите, мне удалось добавить что-то еще
exclude:
, чтобы отфильтровать несколько пакетов.Источник: https://github.com/jaredsburrows/CS-Interview-Questions/blob/master/build.gradle
Пользовательские задачи для других проектов, таких как Android:
Источник: https://github.com/jaredsburrows/android-gradle-java-app-template/blob/master/gradle/quality.gradle#L59
источник
exclude: ['**/*Test*.*'])
jacocoTestReport
работает только с обоимиjacoco
иjava
плагинов. Это не для Android. Пожалуйста, посмотрите мое репо для Android здесь: github.com/jaredsburrows/android-gradle-java-template/blob/…classDirectories =
результатах этого предупреждения.The JacocoReportBase.setClassDirectories(FileCollection) method has been deprecated. This is scheduled to be removed in Gradle 6.0. Use getClassDirectories().from(...)
. Было бы здорово показать решение, совместимое с Gradle 6.0.Для Gradle версии 5.x
classDirectories = files(...)
выдает предупреждение об устаревании и совсем не работает, начиная с Gradle 6.0. Это нерекомендованный способ исключения классов:источник
[]
после,exclude:
чтобы включить несколько путей.для меня нормально работать с
как указано в документации https://docs.gradle.org/current/userguide/jacoco_plugin.html#N16E62 и изначально задано, поэтому ответ:
так что если вы спросите меня: это не вопрос
или
но
исключить пакет
*.projecteuler.*
и
test {}
на уровне проекта, а не вложены вjacocoTestReport
источник
Для Gradle6 используйте что-то вроде ниже, потому что они сделали
classDirectories as final
, мы не можем переназначить его, но существует метод установки,classDirectories.setFrom
который можно использоватьисточник
Вот решение этой проблемы в ANT. Это можно адаптировать к gradle, добавив следующее под
jacocoTestReport
задачей. Хотя это на самом деле не задокументировано jacoco, на данный момент это единственный способ отфильтровать результаты теста.источник
generated/java/
вместоmain/java
.Это было давно, но я только что наткнулся на это. Я боролся со всеми необходимыми исключениями. Я обнаружил, что для меня это было намного проще. Если вы следуете стилю макета проекта Maven / src / main / java и / src / test / java, вам просто нужно поместить buildDir / classes / main в конфигурацию classDirectories следующим образом:
источник
Приведенный ниже код также исключает классы из проверки покрытия:
источник
в некоторых комментариях упоминалось предупреждение об устаревании. для решения просто используйте геттер:
источник
Чтобы выполнить фильтрацию в отчете jacoco, необходимо выполнить исключение в двух задачах
jacocoTestReport
иjacocoTestCoverageVerification
.образец кода
источник
добавьте ниже конфигурацию в файл gradle.properties
coverageExcludeClasses=["com.example.package.elasticsearch.*", "com.example.package2.*",]
источник
coverageExcludeClasses
не похоже, что в JaCoCo / Gradle