Problem:
Mam projekt z jacoco i chcę mieć możliwość filtrowania określonych klas i / lub pakietów.
Powiązana dokumentacja:
Przeczytałem następującą dokumentację:
Urzędnik jacocosite: http://www.eclemma.org/jacoco/index.html
Urzędnik jacoco dokumenty dla gradle: https://gradle.org/docs/current/userguide/jacoco_plugin.html
Urzędnik jacoco Github
zagadnienia, praca nad zasięgiem:
https://github.com/jacoco/jacoco/wiki/FilteringOptions
https://github.com/jacoco/jacoco/issues/14
Powiązane łącza StackOverflow:
JaCoCo i Gradle - Opcje filtrowania (brak odpowiedzi)
Wyklucz pakiety z raportu Jacoco za pomocą Sonarrunner i Gradle (nie używasonar)
JaCoCo - wyklucz JSP z raportu (wydaje się, że działa w przypadkumaven, Ja używam gradle)
Konfiguracja Maven Jacoco - wykluczenie klas / pakietów z raportu nie działa (wydaje się działać dlamaven, Ja używam gradle)
Wykluczenie wtyczki JaCoCo gradle (nie udało się tego uruchomić)
Gradle Jacoco - raporty pokrycia obejmują klasy wykluczone w konfiguracji (Wydaje się bardzo zbliżone, używane doFirst
, nie działały u mnie)
Przykład tego, czego próbowałem:
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"]
}
}
}
Pytanie:
Jak mogę wykluczyć niektóre pakiety i klasy podczas generowania pliku jacoco raporty zasięgu?
źródło
packages
online używającCodecov
? Widziałem teżGithub
, co zAndroid
obsługą, widziałemJava
. Powinienem nadal wysyłać Ci wszystkie raporty, a następnie filtrować po a wcześniej filtrować.excludes
właściwie robi oficjalna dokumentacja ? Czy to jest prawie bezużyteczne?excludes
nie dotyczy zadania pokrycia, ale zadania testowego. Wyklucza to pliki z instrumentowania przez JaCoCo, a tym samym z nagrywania relacji. Możesz tego użyć, jeśli nie chcesz rejestrować pokrycia niektórych klas, jeśli nie możesz tego zrobić z powodu konfliktu z innym agentem instrumentacji lub z powodu wcześniejszego oprzyrządowania klas. Nie wykluczy to klasy z raportu, zwłaszcza w ostatnim wymienionym przypadku byłby to okropny pomysł.Odpowiedzi:
Dzięki
Yannick Welsch
:Po przeszukaniu Google, przeczytaniu dokumentów Gradle i przejrzeniu starszych postów StackOverflow, znalazłem tę odpowiedź w oficjalnym gradle fora!
Źródło: https://issues.gradle.org/browse/GRADLE-2955
Rozwiązanie dla moich
build.gradle
projektów Java / Groovy:Jak widać, udało mi się dodać więcej
exclude:
, aby przefiltrować kilka pakietów.Źródło: https://github.com/jaredsburrows/CS-Interview-Questions/blob/master/build.gradle
Niestandardowe zadania dla innych projektów, takich jak Android:
Źródło: https://github.com/jaredsburrows/android-gradle-java-app-template/blob/master/gradle/quality.gradle#L59
źródło
exclude: ['**/*Test*.*'])
jacocoTestReport
działa tylko z wtyczkamijacoco
i ijava
. To nie jest dla Androida. Zobacz moje repozytorium tutaj dla Androida: github.com/jaredsburrows/android-gradle-java-template/blob/…classDirectories =
wyniki w tym ostrzeżeniem.The JacocoReportBase.setClassDirectories(FileCollection) method has been deprecated. This is scheduled to be removed in Gradle 6.0. Use getClassDirectories().from(...)
. Byłoby wspaniale pokazać rozwiązanie kompatybilne z Gradle 6.0.W przypadku programu Gradle w wersji 5.x
classDirectories = files(...)
ostrzega o wycofaniu i nie działa w ogóle, począwszy od wersji Gradle 6.0. Jest to niezalecany sposób wykluczania klas:źródło
[]
po,exclude:
aby uwzględnić kilka ścieżek.dla mnie dobrze się pracuje z
jak stwierdzono w dokumentacji https://docs.gradle.org/current/userguide/jacoco_plugin.html#N16E62 i początkowo zapytano, więc odpowiedź brzmi:
więc jeśli mnie zapytasz: to nie jest kwestia
lub
ale
aby wykluczyć pakiet
*.projecteuler.*
i
test {}
na poziomie projektu, nie zagnieżdżone wjacocoTestReport
źródło
Dla Gradle6 Użyj czegoś takiego jak poniżej, ponieważ stworzyli
classDirectories as final
, nie możemy go ponownie przypisać, ale istnieje metoda ustawiająca,classDirectories.setFrom
którą można wykorzystaćźródło
Oto rozwiązanie tego problemu w ANT. Można to dostosować do gradle, dodając w
jacocoTestReport
zadaniu następujące elementy . Chociaż jacoco tak naprawdę nie jest udokumentowane, wydaje się, że na razie jest to jedyny sposób na przefiltrowanie wyników testu.źródło
generated/java/
zamiastmain/java
.To było przez jakiś czas, ale właśnie się z tym spotkałem. Walczyłem ze wszystkimi potrzebnymi wykluczeniami. Okazało się, że to dla mnie coś znacznie prostszego. Jeśli podążasz za stylem projektu Maven / src / main / java i / src / test / java, po prostu musisz umieścić buildDir / classes / main w swojej konfiguracji classDirectories w następujący sposób:
źródło
Poniższy kod wyłącza również klasy z weryfikacji pokrycia:
źródło
w niektórych komentarzach wspomniano o ostrzeżeniu o wycofaniu. aby rozwiązać po prostu użyj gettera:
źródło
Aby filtrować w raporcie jacoco, wykluczenie należy wykonać w dwóch zadaniach
jacocoTestReport
ijacocoTestCoverageVerification
.przykładowy kod
źródło
dodaj poniższą konfigurację w pliku gradle.properties
coverageExcludeClasses=["com.example.package.elasticsearch.*", "com.example.package2.*",]
źródło
coverageExcludeClasses
nie wydaje się być czymś w JaCoCo / Gradle