jacoco のプロジェクトがあり、特定のクラスやパッケージをフィルタリングできるようにしたい。
次のドキュメントを読みました。
公式 jacoco site:http://www.eclemma.org/jacoco/index.html =
公式 jacocogradle :のドキュメント https://gradle.org/ docs/current/userguide/jacoco_plugin.html
Official jacocoGithub
の問題、カバレッジの改善:https://github.com/ jacoco/jacoco/wiki/FilteringOptionshttps://github.com/jacoco/jacoco/issues/14
JaCoCo&Gradle-フィルタリングオプション (回答なし)
SonarrunnerとGradleを使用してJacocoレポートからパッケージを除外する ( sonar を使用しない
JaCoCo-レポートからJSPを除外する ( maven で機能するようです、私は gradle を使用しています)
Maven Jacoco構成-動作しないレポートからクラス/パッケージを除外する ( maven で動作するようです、 gradle を使用しています)
JaCoCo gradle plugin exclude (これを機能させることができませんでした)
Gradle Jacoco-カバレッジレポートには構成で除外されたクラスが含まれます (非常に近いようです。doFirst
を使用しましたが、機能しませんでした)
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"]
}
}
}
jacoco カバレッジレポートを生成するときに特定のパッケージとクラスを除外するにはどうすればよいですか?
Yannick Welsch
:Googleを検索し、Gradleのドキュメントを読んで古いStackOverflowの投稿を調べた後、公式の gradle フォーラムでこの回答を見つけました!
jacocoTestReport {
afterEvaluate {
classDirectories = files(classDirectories.files.collect {
fileTree(dir: it, exclude: 'com/blah/**')
})
}
}
出典:https://issues.gradle.org/browse/GRADLE-2955
build.gradle
のソリューション: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/**'])
})
}
}
ご覧のとおり、いくつかのパッケージをフィルタリングするために、exclude:
にさらに追加できました。
出典:https://github.com/jaredsburrows/CS-Interview-Questions/blob/master/build.gradle
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/**'])
})
}
}
Gradleバージョン5.0以降では、classDirectories = files(...)
は非推奨の警告を出します。これは、クラスを除外する非推奨の方法です。
jacocoTestReport {
afterEvaluate {
classDirectories.setFrom(files(classDirectories.files.collect {
fileTree(dir: it, exclude: 'com/exclude/**')
}))
}
}
私にとっては、それはうまく働いています
test {
jacoco {
excludes += ['codeeval/**',
'crackingthecode/part3knowledgebased/**',
'**/Chapter7ObjectOrientedDesign**',
'**/Chapter11Testing**',
'**/Chapter12SystemDesignAndMemoryLimits**',
'projecteuler/**']
}
}
ドキュメントに記載されているように https://docs.gradle.org/current/userguide/jacoco_plugin.html#N16E62 そして最初に尋ねられたので、答えは:
だからあなたが私に尋ねた場合:それはの質問ではありません
excludes = ["projecteuler/**"]
または
excludes += ["projecteuler/**"]
しかし
excludes = ["**/projecteuler/**"]
パッケージを除外するには*.projecteuler.*
およびtest {}
プロジェクトレベルで、jacocoTestReport
にネストされていません
ここ は、ANTのこの問題の解決策です。 jacocoTestReport
タスクの下に以下を追加することで、これをgradleに適合させることができます。これは実際にはjacocoによって文書化されていませんが、現時点ではテスト結果をフィルタリングする唯一の方法のようです。
afterEvaluate {
classDirectories = files(classDirectories.files.collect {
fileTree(dir: it, exclude: 'excluded/files/**')
})
}
これはしばらくの間出てきましたが、私はこれに出くわしました。必要なすべての除外に苦労していました。それは私にとってはるかに単純なものであることがわかりました。 Mavenプロジェクトのレイアウトスタイル/ src/main/Javaおよび/ src/test/Javaに従う場合は、単にbuildDir/classes /mainあなたのclassDirectoriesのように設定:
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
]
)
}
}
以下のコードは、カバレッジ検証からクラスも除外します。
jacocoTestCoverageVerification {
afterEvaluate {
classDirectories = files(classDirectories.files.collect {
fileTree(dir: "${project.buildDir}/classes/main",
exclude: ['**/packagename/**'])
})
}
}