Filtrar informes de cobertura de JaCoCo con Gradle
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:
Sitio oficial de jacoco : {[17]]} http://www.eclemma.org/jacoco/index.html
Oficial jacoco docs para gradle: https://gradle.org/docs/current/userguide/jacoco_plugin.html
Oficial jacoco Github
cuestiones, trabajando en la cobertura:
https://github.com/jacoco/jacoco/wiki/FilteringOptions
https://github.com/jacoco/jacoco/issues/14
Enlaces relacionados con StackOverflow:
JaCoCo & Gradle-Opciones de filtrado (Sin respuesta)
Excluir paquetes del informe Jacoco usando Sonarrunner y Gradle (No usando sonar )
JaCoCo-excluir JSP del informe (Parece funcionar para maven, estoy usando gradle )
Maven Jacoco Configuration-Excluir clases / paquetes del informe no funciona (Parece funcionar para maven, estoy usando gradle )
JaCoCo gradle plugin exclude (No se pudo hacer que esto funcione)
Gradle Jacoco-los informes de cobertura incluyen clases excluidas en la configuración (Parece muy cerca, se utiliza doFirst
, no funcionó para mí)
Ejemplo de lo que he intentado:
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 los informes de cobertura jacoco?
5 answers
Gracias a, Yannick Welsch
:
Después de buscar en Google, leer los documentos de Gradle y revisar publicaciones más antiguas de StackOverflow, encontré esta respuesta en los foros Oficiales de gradle.
jacocoTestReport {
afterEvaluate {
classDirectories = files(classDirectories.files.collect {
fileTree(dir: it, exclude: 'com/blah/**')
})
}
}
Fuente: https://issues.gradle.org/browse/GRADLE-2955
Solución a mis build.gradle
para proyectos Java / Groovy:
apply plugin: 'java'
apply plugin: 'jacoco'
jacocoTestReport {
reports {
xml {
enabled true // coveralls plugin depends on xml format report
}
html {
enabled true
}
}
afterEvaluate {
classDirectories = files(classDirectories.files.collect {
fileTree(dir: it,
exclude: ['codeeval/**',
'crackingthecode/part3knowledgebased/**',
'**/Chapter7ObjectOrientedDesign**',
'**/Chapter11Testing**',
'**/Chapter12SystemDesignAndMemoryLimits**',
'projecteuler/**'])
})
}
}
Como puede ver, pude agregar más a exclude:
con el fin de filtrar algunos paquetes.
Fuente: https://github.com/jaredsburrows/CS-Interview-Questions/blob/master/build.gradle
Tareas personalizadas para otros proyectos como Android:
apply plugin: 'jacoco'
task jacocoReport(type: JacocoReport) {
reports {
xml {
enabled true // coveralls plugin depends on xml format report
}
html {
enabled true
}
}
afterEvaluate {
classDirectories = files(classDirectories.files.collect {
fileTree(dir: it,
exclude: ['codeeval/**',
'crackingthecode/part3knowledgebased/**',
'**/Chapter7ObjectOrientedDesign**',
'**/Chapter11Testing**',
'**/Chapter12SystemDesignAndMemoryLimits**',
'projecteuler/**'])
})
}
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-10-23 14:07:50
Para mí, está bien trabajar con
test {
jacoco {
excludes += ['codeeval/**',
'crackingthecode/part3knowledgebased/**',
'**/Chapter7ObjectOrientedDesign**',
'**/Chapter11Testing**',
'**/Chapter12SystemDesignAndMemoryLimits**',
'projecteuler/**']
}
}
Como se indica en la documentación https://docs.gradle.org/current/userguide/jacoco_plugin.html#N16E62 e initally preguntó así que la respuesta es:
Así que si me preguntas: no es una cuestión de{[8]]}
excludes = ["projecteuler/**"]
O
excludes += ["projecteuler/**"]
Pero
excludes = ["**/projecteuler/**"]
Para excluir un paquete *.projecteuler.*
Y test {}
a nivel de proyecto, no anidado en jacocoTestReport
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-06-21 10:37:31
Aquí es una solución para este problema en ANT. Esto se puede adaptar a gradle agregando lo siguiente en la tarea jacocoTestReport
. Aunque esto no está realmente documentado por jacoco, parece ser la única manera de filtrar los resultados de las pruebas por ahora.
afterEvaluate {
classDirectories = files(classDirectories.files.collect {
fileTree(dir: it, exclude: 'excluded/files/**')
})
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:09:58
Esto ha estado fuera por un tiempo, pero acabo de encontrarme 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 sus classDirectories config así:
afterEvaluate {
jacocoTestReport {
def coverageSourceDirs = ['src/main/java']
reports {
xml.enabled false
csv.enabled false
html.destination "${buildDir}/reports/jacocoHtml"
}
sourceDirectories = files(coverageSourceDirs)
classDirectories = fileTree(
dir: "${project.buildDir}/classes/main",
excludes: [
//whatever here like JavaConfig etc. in /src/main/java
]
)
}
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-03-02 00:16:45
El siguiente código también excluye las clases de la verificación de cobertura:
jacocoTestCoverageVerification {
afterEvaluate {
classDirectories = files(classDirectories.files.collect {
fileTree(dir: "${project.buildDir}/classes/main",
exclude: ['**/packagename/**'])
})
}
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-01-30 12:54:29