Masalah:
Saya punya proyek dengan jacoco dan saya ingin dapat memfilter kelas dan / atau paket tertentu.
Dokumentasi Terkait:
Saya telah membaca dokumentasi berikut:
Resmi jacocositus: http://www.eclemma.org/jacoco/index.html
Resmi jacoco dokumen untuk gradle: https://gradle.org/docs/current/userguide/jacoco_plugin.html
Resmi jacoco Github
masalah, mengerjakan liputan:
https://github.com/jacoco/jacoco/wiki/FilteringOptions
https://github.com/jacoco/jacoco/issues/14
Tautan StackOverflow Terkait:
JaCoCo & Gradle - Opsi Pemfilteran (Tidak ada jawaban)
Kecualikan paket dari laporan Jacoco menggunakan Sonarrunner dan Gradle (Tidak menggunakansonar)
JaCoCo - kecualikan JSP dari laporan (Sepertinya berfungsi untukmaven, Saya menggunakan gradle)
Konfigurasi Maven Jacoco - Kecualikan kelas / paket dari laporan tidak berfungsi (Tampaknya berfungsi untukmaven, Saya menggunakan gradle)
Kecualikan plugin gradle JaCoCo (Tidak dapat membuat ini berfungsi)
Gradle Jacoco - laporan cakupan menyertakan kelas yang dikecualikan dalam konfigurasi (Sepertinya sangat dekat, ini digunakan doFirst
, tidak berfungsi untuk saya)
Contoh yang sudah saya coba:
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"]
}
}
}
Pertanyaan:
Bagaimana cara mengecualikan paket dan kelas tertentu saat membuat file jacoco laporan cakupan?
sumber
packages
online menggunakanCodecov
? Juga, saya melihatGithub
, bagaimana denganAndroid
dukungan, saya melihatJava
. Saya tetap harus mengirimkan semua laporan kepada Anda kemudian memfilter setelah vs memfilter sebelumnya.excludes
sebenarnya dilakukan oleh dokumentasi resmi ? Apakah itu sangat tidak berguna?excludes
bukan pada tugas cakupan, tapi pada tugas ujian. Ini mengecualikan file agar tidak diinstrumentasi oleh JaCoCo dan dengan demikian cakupan direkam. Anda dapat menggunakan ini jika Anda tidak ingin merekam liputan untuk beberapa kelas, jika Anda tidak bisa karena beberapa konflik dengan agen instrumen lain, atau karena Anda pra-instrumentasi kelas. Ini tidak akan mengecualikan kelas dari laporan, terutama dalam kasus terakhir yang disebutkan, ini akan menjadi ide yang buruk.Jawaban:
Berkat,
Yannick Welsch
:Setelah mencari di Google, membaca dokumen Gradle dan melalui posting StackOverflow yang lebih lama, saya menemukan jawaban ini di Official gradle forum!
Sumber: https://issues.gradle.org/browse/GRADLE-2955
Solusi saya
build.gradle
untuk proyek Java / Groovy:Seperti yang Anda lihat, saya berhasil menambahkan lebih banyak ke
exclude:
untuk memfilter beberapa paket.Sumber: https://github.com/jaredsburrows/CS-Interview-Questions/blob/master/build.gradle
Tugas khusus untuk proyek lain seperti Android:
Sumber: https://github.com/jaredsburrows/android-gradle-java-app-template/blob/master/gradle/quality.gradle#L59
sumber
exclude: ['**/*Test*.*'])
jacocoTestReport
hanya bekerja dengan pluginjacoco
danjava
. Ini bukan untuk Android. Silakan lihat repo saya di sini untuk android: github.com/jaredsburrows/android-gradle-java-template/blob/…classDirectories =
hasil dalam peringatan ini.The JacocoReportBase.setClassDirectories(FileCollection) method has been deprecated. This is scheduled to be removed in Gradle 6.0. Use getClassDirectories().from(...)
. Akan sangat bagus untuk menunjukkan solusi yang kompatibel dengan Gradle 6.0.Untuk Gradle versi 5.x, pemberian
classDirectories = files(...)
peringatan penghentian dan tidak berfungsi sama sekali mulai dari Gradle 6.0 Ini adalah cara yang tidak berlaku lagi untuk mengecualikan kelas:sumber
[]
setelahexclude:
memasukkan beberapa jalur.bagi saya, tidak masalah bekerja dengan
sebagaimana tercantum dalam dokumentasi https://docs.gradle.org/current/userguide/jacoco_plugin.html#N16E62 dan pada awalnya ditanyakan jawabannya adalah:
jadi jika Anda bertanya kepada saya: ini bukan pertanyaan tentang
atau
tapi
untuk mengecualikan sebuah paket
*.projecteuler.*
dan
test {}
pada tingkat proyek, tidak bertingkatjacocoTestReport
sumber
Untuk Gradle6 Gunakan sesuatu seperti di bawah ini, karena dibuat
classDirectories as final
, kita tidak dapat menetapkannya kembali, tetapi ada metode penyetelclassDirectories.setFrom
yang dapat digunakansumber
Berikut adalah solusi untuk masalah ini di ANT. Ini dapat diadaptasi untuk gradle dengan menambahkan yang berikut di bawah
jacocoTestReport
tugas. Meskipun ini tidak benar-benar didokumentasikan oleh jacoco, sepertinya itu satu-satunya cara untuk memfilter hasil tes untuk saat ini.sumber
generated/java/
alih-alihmain/java
.Ini sudah lama keluar, tapi saya baru saja menemukan ini. Saya berjuang dengan semua pengecualian yang dibutuhkan. Saya menemukan itu adalah sesuatu yang jauh lebih sederhana bagi saya. Jika Anda mengikuti gaya layout proyek Maven / src / main / java dan / src / test / java, Anda hanya perlu meletakkan buildDir / class / main di konfigurasi classDirectories Anda seperti ini:
sumber
Kode di bawah ini juga mengecualikan kelas dari verifikasi cakupan:
sumber
beberapa komentar menyebutkan peringatan penghentian. untuk menyelesaikannya, cukup gunakan getter:
sumber
Untuk memfilter di laporan jacoco, pengecualian perlu dilakukan dalam dua tugas
jacocoTestReport
danjacocoTestCoverageVerification
.Kode sampel
sumber
tambahkan konfigurasi di bawah ini di file gradle.properties
coverageExcludeClasses=["com.example.package.elasticsearch.*", "com.example.package2.*",]
sumber
coverageExcludeClasses
tampaknya tidak menjadi apa-apa di JaCoCo / Gradle