Problema:
Tengo un proyecto con jacoco y quiero poder filtrar ciertas clases y / o paquetes.
Documentación relacionada:
He leído la siguiente documentación:
Oficial jacocositio: http://www.eclemma.org/jacoco/index.html
Oficial jacoco docs para gradle: https://gradle.org/docs/current/userguide/jacoco_plugin.html
Oficial jacoco Github
problemas, trabajando en la cobertura:
https://github.com/jacoco/jacoco/wiki/FilteringOptions
https://github.com/jacoco/jacoco/issues/14
Enlaces relacionados de StackOverflow:
JaCoCo & Gradle - Opciones de filtrado (Sin respuesta)
Excluir paquetes del informe de Jacoco usando Sonarrunner y Gradle (sin usarsonar)
JaCoCo: excluir JSP del informe (parece funcionar paramaven, Estoy usando gradle)
Configuración de Maven Jacoco: excluir clases / paquetes del informe que no funciona (parece funcionar paramaven, Estoy usando gradle)
Exclusión del complemento gradle de JaCoCo (No se pudo hacer que esto funcione)
Gradle Jacoco: los informes de cobertura incluyen clases excluidas en la configuración (parece muy cercano, se usó doFirst
, no funcionó para mí)
Ejemplo de lo que he probado:
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"]
}
}
}
Pregunta:
¿Cómo puedo excluir ciertos paquetes y clases al generar el jacoco informes de cobertura?
fuente
packages
Internet usandoCodecov
? Además, vi elGithub
, qué pasa con elAndroid
apoyo, viJava
. Debería tener que enviarte todos los informes y luego filtrar después y filtrar antes.excludes
de la documentación oficial de hecho lo hacen , entonces? ¿Es bastante inútil?excludes
no está en la tarea de cobertura, sino en la tarea de prueba. Excluye archivos de ser instrumentados por JaCoCo y por lo tanto la cobertura se registra. Puede usar esto si no desea registrar la cobertura de algunas clases, si no puede debido a algún conflicto con otro agente de instrumentación o porque instrumentó previamente las clases. Esto no excluirá a una clase del informe, especialmente en el último caso mencionado, sería una idea horrible.Respuestas:
Gracias a
Yannick Welsch
:Después de buscar en Google, leer los documentos de Gradle y revisar las publicaciones más antiguas de StackOverflow, encontré esta respuesta en el Oficial gradle foros!
Fuente: https://issues.gradle.org/browse/GRADLE-2955
Solución a mi
build.gradle
para proyectos Java / Groovy:Como puede ver, pude agregar más
exclude:
para filtrar algunos paquetes.Fuente: https://github.com/jaredsburrows/CS-Interview-Questions/blob/master/build.gradle
Tareas personalizadas para otros proyectos como Android:
Fuente: https://github.com/jaredsburrows/android-gradle-java-app-template/blob/master/gradle/quality.gradle#L59
fuente
exclude: ['**/*Test*.*'])
jacocoTestReport
solo funciona con complementosjacoco
yjava
. Esto no es para Android. Consulte mi repositorio aquí para Android: github.com/jaredsburrows/android-gradle-java-template/blob/…classDirectories =
resultados en esta advertencia.The JacocoReportBase.setClassDirectories(FileCollection) method has been deprecated. This is scheduled to be removed in Gradle 6.0. Use getClassDirectories().from(...)
. Sería genial mostrar una solución compatible con Gradle 6.0.Para la versión 5.x de Gradle,
classDirectories = files(...)
da una advertencia de obsolescencia y no funciona en absoluto a partir de Gradle 6.0 Esta es la forma no obsoleta de excluir clases:fuente
[]
despuésexclude:
para incluir varias rutas.para mí, está bien trabajar con
como se indica en la documentación https://docs.gradle.org/current/userguide/jacoco_plugin.html#N16E62 y se preguntó inicialmente, por lo que la respuesta es:
así que si me preguntas: no es una cuestión de
o
pero
para excluir un paquete
*.projecteuler.*
y
test {}
a nivel de proyecto, no anidado enjacocoTestReport
fuente
Para Gradle6 Use algo como a continuación, porque hicieron
classDirectories as final
, no podemos reasignarlo, pero existe un método de establecimientoclassDirectories.setFrom
que se puede utilizarfuente
Aquí hay una solución para este problema en ANT. Esto se puede adaptar a Gradle agregando lo siguiente debajo de la
jacocoTestReport
tarea. Aunque esto no está realmente documentado por jacoco, parece ser la única forma de filtrar los resultados de la prueba por ahora.fuente
generated/java/
lugar demain/java
.Esto ha estado fuera por un tiempo, pero me encontré con esto. Estaba luchando con todas las exclusiones necesarias. Descubrí que era algo mucho más simple para mí. Si sigue el estilo de diseño del proyecto Maven / src / main / java y / src / test / java, simplemente necesita poner buildDir / classes / main en su configuración de classDirectories así:
fuente
El siguiente código también excluye las clases de la verificación de cobertura:
fuente
algunos comentarios mencionaron la advertencia de desaprobación. para resolver solo usa el getter:
fuente
Para filtrar en el informe jacoco, la exclusión debe realizarse en dos tareas
jacocoTestReport
yjacocoTestCoverageVerification
.Código de muestra
fuente
agregue la siguiente configuración en el archivo gradle.properties
coverageExcludeClasses=["com.example.package.elasticsearch.*", "com.example.package2.*",]
fuente
coverageExcludeClasses
no parece ser una cosa en JaCoCo / Gradle