Filtrer les rapports de couverture de JaCoCo avec Gradle
problème:
j'ai un projet avec jacoco et je veux pouvoir filtrer certaines classes et/ou paquets.
Documentation Connexe:
j'ai lu la documentation suivante:
officiel jacoco site: http://www.eclemma.org/jacoco/index.html
Official jacoco docs for gradle : https://gradle.org/docs/current/userguide/jacoco_plugin.html
Officiel jacoco Github
, travail sur la couverture:
https://github.com/jacoco/jacoco/wiki/FilteringOptions
https://github.com/jacoco/jacoco/issues/14
Liées StackOverflow Liens:
JaCoCo & Grad-Options de filtrage (pas de réponse)
exclure les colis du rapport Jacoco en utilisant Sonarrunner et Grad (ne pas utiliser sonar )
JaCoCo-exclure JSP du rapport (il semble fonctionner pour maven , j'utilise Grad )
Configuration de Maven Jacoco-exclure les classes/paquets du rapport ne fonctionne pas (cela semble fonctionner pour maven , j'utilise gradle )
JaCoCo gradle plugin exclure (pas Pu obtenir que cela fonctionne)
Gradle Jacoco - les rapports de couverture inclut des classes exclues dans la configuration (Semble très proche, il a utilisé doFirst
, n'a pas de travail pour moi)
exemple de ce que j'ai essayé:
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"]
}
}
}
Question:
Comment puis-je exclure certains paquets et classes lors de la génération des rapports de couverture jacoco ?
5 réponses
Merci, Yannick Welsch
:
après avoir cherché Google, en lisant les docs de Grad le et en passant par les plus anciens StackOverflow messages, j'ai trouvé cette réponse sur le officiel Grad le forums!
jacocoTestReport {
afterEvaluate {
classDirectories = files(classDirectories.files.collect {
fileTree(dir: it, exclude: 'com/blah/**')
})
}
}
Source: https://issues.gradle.org/browse/GRADLE-2955
Solution à mon build.gradle
pour Java/Groovy projets:
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/**'])
})
}
}
comme vous pouvez le voir, j'ai réussi à ajouter plus de paquets à exclude:
afin de filtrer quelques paquets.
Source: https://github.com/jaredsburrows/CS-Interview-Questions/blob/master/build.gradle
tâches personnalisées pour D'autres projets tels que 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/**'])
})
}
}
pour moi, c'est très bien de travailler avec
test {
jacoco {
excludes += ['codeeval/**',
'crackingthecode/part3knowledgebased/**',
'**/Chapter7ObjectOrientedDesign**',
'**/Chapter11Testing**',
'**/Chapter12SystemDesignAndMemoryLimits**',
'projecteuler/**']
}
}
, comme indiqué dans la documentation https://docs.gradle.org/current/userguide/jacoco_plugin.html#N16E62 et initalement demandé la réponse est donc:
donc, si vous me demandez: ce n'est pas une question de
excludes = ["projecteuler/**"]
ou
excludes += ["projecteuler/**"]
mais
excludes = ["**/projecteuler/**"]
pour exclure un colis *.projecteuler.*
et test {}
au niveau du projet, non imbriqués dans jacocoTestReport
Ici est une solution pour ce problème dans ANT. Ceci peut être adapté à gradle en ajoutant ce qui suit Sous la tâche jacocoTestReport
. Bien que cela ne soit pas vraiment documenté par jacoco, cela semble être la seule façon de filtrer les résultats des tests pour l'instant.
afterEvaluate {
classDirectories = files(classDirectories.files.collect {
fileTree(dir: it, exclude: 'excluded/files/**')
})
}
c'est éteint depuis un moment, mais je viens de croiser ça. Je me débattais avec toutes les exclusions nécessaires. J'ai trouvé que c'était quelque chose de beaucoup plus simple pour moi. Si vous suivez le projet Maven style de mise en page /src/main/java et /src/test/java, il vous suffit de mettre buildDir/classes/ principal dans votre classDirectories config comme suit:
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
]
)
}
}
le code ci-dessous exclut également les classes de la vérification de la couverture:
jacocoTestCoverageVerification {
afterEvaluate {
classDirectories = files(classDirectories.files.collect {
fileTree(dir: "${project.buildDir}/classes/main",
exclude: ['**/packagename/**'])
})
}
}