前書き
Gradle で Test タスクを実施したら、自動的に Jacoco でカバレッジレポートを出力してくれたらいいなー
を満たすための build.gradle の設定になります。
個人的に Java & SpringBoot で開発することが多いため、build.gradle にはその設定が含まれていますが、Test タスク → Jacoco レポート出力を満たすためだけであればそのあたりの設定は不要です。
なお、ここで上げている build.gradle は Spring Initializr で生成したプロジェクトの雛形を元に編集しました。
環境
- Gradle
- Java 8
- Jacoco
- JUnit (spring-boot-starter-testに含まれるものを使用)
なお、動作確認は以下の環境下で行いました。
- Javaの文字コード:UTF-8
- OS: Windows 10, Mac 10.15.1 (Catalina)
build.gradle
plugins {
id 'org.springframework.boot' version '2.2.1.RELEASE'
id 'io.spring.dependency-management' version '1.0.8.RELEASE'
id 'java'
id 'jacoco'
}
group = 'com.example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8'
configurations {
compileOnly {
extendsFrom annotationProcessor
}
}
repositories {
maven {
url "https://plugins.gradle.org/m2/"
}
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
// コンパイル時に使用する文字コードをUTF-8で固定する
tasks.withType(AbstractCompile).each { it.options.encoding = 'UTF-8' }
tasks.withType(Test) {
systemProperty "file.encoding", "UTF-8"
}
// testタスクの後にjacocoTestReportタスクを実施する
test.finalizedBy jacocoTestReport
// jacocoのレポートから除外するクラスファイル。ここに除外したいクラスを列挙する
def coverageExcludeFiles = [
// 内部クラスやLambda匿名クラスを排除
'**/*$*.class',
'**/*$lambda$*.class',
]
// jacocoTestReportタスク。前述の「jacocoのレポートから除外するクラスファイル」の設定を組み込んだタスクにしています。
jacocoTestReport {
reports {
html.enabled = true
}
afterEvaluate {
classDirectories = files(classDirectories.files.collect {
fileTree(
dir: it,
exclude: coverageExcludeFiles)
})
}
}
補足
gradle test
or ./gradlew test
を実施するとjacocoでカバレッジレポートを出力してくれます。
なお、上記の設定を行うと、
gradle build
or ./gradlew build
を行ってもTestタスクの直後にJacocoでカバレッジレポートが出力されます。
使い勝手は善し悪しがあると思いますが、CIで毎回カバレッジレポートを出したい!といったときにちょっとだけ便利になるかもしれません。
当然ではありますが、jacocoTestReport
タスクを個別に実施してもレポートは出力されますが、カバレッジレポートの出力元となるTestタスクを実施しないと意味はないです。
また、build.gralde 内で文字コードをUTF-8で固定していますが、この記述がないとWindows環境ではカバレッジレポートに出力されるソースコードの日本語文字列が文字化けしました。ソースコードがUTF-8で記載かつWindows環境の場合はご参考にしてください。