Problem:
Ich habe ein Projekt mit Jacoco und ich möchte in der Lage sein, bestimmte Klassen und / oder Pakete zu filtern.
Dazugehörige Dokumentation:
Ich habe die folgende Dokumentation gelesen:
Offiziell JacocoWebsite: http://www.eclemma.org/jacoco/index.html
Offiziell Jacoco Dokumente für gradle: https://gradle.org/docs/current/userguide/jacoco_plugin.html
Offiziell Jacoco Github
Probleme, die an der Berichterstattung arbeiten:
https://github.com/jacoco/jacoco/wiki/FilteringOptions
https://github.com/jacoco/jacoco/issues/14
Verwandte StackOverflow-Links:
JaCoCo & Gradle - Filteroptionen (Keine Antwort)
Schließen Sie Pakete aus dem Jacoco-Bericht mit Sonarrunner und Gradle aus (nicht mitSonar)
JaCoCo - JSP vom Bericht ausschließen (es scheint zu funktionierenMaven, Ich benutze gradle)
Maven Jacoco-Konfiguration - Schließen Sie Klassen / Pakete von Berichten aus, die nicht funktionieren (es scheint zu funktionierenMaven, Ich benutze gradle)
JaCoCo Gradle Plugin ausschließen (Konnte dies nicht zum Laufen bringen )
Gradle Jacoco - Berichterstattungsberichte enthalten Klassen, die in der Konfiguration ausgeschlossen sind (Scheint sehr nahe, es hat verwendet doFirst
, hat bei mir nicht funktioniert)
Beispiel für das, was ich versucht habe:
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"]
}
}
}
Frage:
Wie kann ich bestimmte Pakete und Klassen beim Generieren der ausschließen? Jacoco Berichterstattungsberichte?
quelle
packages
online filternCodecov
? Außerdem habe ich gesehenGithub
, was ist mitAndroid
Unterstützung, die ich gesehen habeJava
. Ich sollte Ihnen immer noch alle Berichte senden müssen, um danach zu filtern und vorher zu filtern.excludes
von der offiziellen Dokumentation tatsächlich tun dann? Ist es so ziemlich nutzlos?excludes
betrifft nicht die Abdeckungsaufgabe, sondern die Testaufgabe. Es schließt aus, dass Dateien von JaCoCo instrumentiert und somit die Berichterstattung aufgezeichnet wird. Sie können dies verwenden, wenn Sie für einige Klassen keine Abdeckung aufzeichnen möchten, wenn Sie dies aufgrund eines Konflikts mit einem anderen Instrumentierungsagenten nicht können oder weil Sie Klassen vorinstrumentiert haben. Dies schließt eine Klasse nicht aus dem Bericht aus, insbesondere im zuletzt genannten Fall wäre dies eine schreckliche Idee.Antworten:
Danke an
Yannick Welsch
:Nachdem ich Google durchsucht, die Gradle-Dokumente gelesen und ältere StackOverflow-Beiträge durchgesehen hatte, fand ich diese Antwort im Official gradle Foren!
Quelle: https://issues.gradle.org/browse/GRADLE-2955
Lösung für meine
build.gradle
Java / Groovy-Projekte:Wie Sie sehen, konnte ich erfolgreich weitere hinzufügen,
exclude:
um einige Pakete zu filtern.Quelle: https://github.com/jaredsburrows/CS-Interview-Questions/blob/master/build.gradle
Benutzerdefinierte Aufgaben für andere Projekte wie Android:
Quelle: https://github.com/jaredsburrows/android-gradle-java-app-template/blob/master/gradle/quality.gradle#L59
quelle
exclude: ['**/*Test*.*'])
jacocoTestReport
funktioniert nur mit beidenjacoco
undjava
Plugins. Dies ist nicht für Android. Bitte sehen Sie mein Repo hier für Android: github.com/jaredsburrows/android-gradle-java-template/blob/…classDirectories =
Ergebnisse in dieser Warnung.The JacocoReportBase.setClassDirectories(FileCollection) method has been deprecated. This is scheduled to be removed in Gradle 6.0. Use getClassDirectories().from(...)
. Es wäre großartig, eine Lösung zu zeigen, die mit Gradle 6.0 kompatibel ist.Für Gradle Version 5.x
classDirectories = files(...)
gibt das eine Warnung vor Verfall aus und funktioniert ab Gradle 6.0 überhaupt nicht. Dies ist die nicht veraltete Methode zum Ausschließen von Klassen:quelle
[]
nach hinzufügenexclude:
, um mehrere Pfade einzuschließen.Für mich ist es gut, damit zu arbeiten
Wie in der Dokumentation https://docs.gradle.org/current/userguide/jacoco_plugin.html#N16E62 angegeben und ursprünglich gefragt, lautet die Antwort:
Also, wenn Sie mich fragen: Es ist keine Frage von
oder
aber
ein Paket ausschließen
*.projecteuler.*
und
test {}
auf Projektebene nicht verschachteltjacocoTestReport
quelle
Für Gradle6 Verwenden Sie etwas wie das Folgende, da es gemacht wurde
classDirectories as final
, können wir es nicht neu zuweisen, aber es gibt eine Setter-Methode,classDirectories.setFrom
die verwendet werden kannquelle
Hier ist eine Lösung für dieses Problem in ANT. Dies kann an Gradle angepasst werden, indem unter der
jacocoTestReport
Aufgabe Folgendes hinzugefügt wird . Obwohl dies von jacoco nicht wirklich dokumentiert ist, scheint es die einzige Möglichkeit zu sein, die Testergebnisse vorerst zu filtern.quelle
generated/java/
statt befindenmain/java
.Das ist schon eine Weile weg, aber ich bin gerade darauf gestoßen. Ich hatte mit allen notwendigen Ausschlüssen zu kämpfen. Ich fand es viel einfacher für mich. Wenn Sie dem Maven-Projektlayoutstil / src / main / java und / src / test / java folgen, müssen Sie buildDir / classes / main einfach wie folgt in Ihre classDirectories- Konfiguration einfügen :
quelle
Der folgende Code schließt Klassen ebenfalls von der Überprüfung der Abdeckung aus:
quelle
In einigen Kommentaren wurde die Abwertungswarnung erwähnt. zum lösen benutze einfach den getter:
quelle
Um im Jacoco-Bericht zu filtern, muss der Ausschluss in zwei Aufgaben
jacocoTestReport
und erfolgenjacocoTestCoverageVerification
.Beispielcode
quelle
Fügen Sie die folgende Konfiguration in die Datei gradle.properties ein
coverageExcludeClasses=["com.example.package.elasticsearch.*", "com.example.package2.*",]
quelle
coverageExcludeClasses
scheint in JaCoCo / Gradle