1. 들어가며
진행하고 있는 프로젝트는 멀티 모듈로 운영하고 있는데, jacoco 테스트 리포트를 만들면 모듈마다 build 패키지에 리포트가 생성되어 하나로 확인하기 어렵다.
Gradle 7.4부터 지원하는 jacoco-report-aggregation 플러그인을 사용하면 여러 모듈에 걸친 테스트 리포트를 하나로 통합하여 관리할 수 있다.
2. rootProject - build.gradle
루트 프로젝트의 build.gradle에 아래와 같이 코드를 추가해준다. 주석으로 위에 jacoco라고 적은 부분이 jacoco 연동을 위해 추가된 코드이다.
이제 모든 하위 모듈에 jacoco 플러그인이 추가되었고, ./gradlew testCodeCoverageReport 명령어로 테스트 리포트를 만들 수 있다.
plugins {
id 'java'
id 'org.springframework.boot' version '3.2.1'
id 'io.spring.dependency-management' version '1.1.4'
// jacoco
id 'jacoco'
}
java {
sourceCompatibility = '17'
}
// jacoco
jacoco {
toolVersion = '0.8.11'
}
// 루트 프로젝트를 포함해 하위 프로젝트 전체에 영향을 주는 설정
allprojects {
group = 'com.dilly'
version = '0.0.1-SNAPSHOT'
repositories {
mavenCentral()
}
// 공통 dependencies
dependencies {
}
}
// 해당 프로젝트에 포함된 모든 모듈에 영향을 주는 설정
subprojects {
apply plugin: 'java'
apply plugin: 'java-library'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'
// jacoco
apply plugin: 'jacoco'
dependencies {
// 중략 ...
}
}
tasks.named('test') {
useJUnitPlatform()
}
bootJar.enabled = false
3. report 통합에 사용할 모듈 생성
다른 모듈들과 분리된, 리포트 통합에만 사용할 suport 모듈을 하나 만들어준다.
(지금은 리포트 통합만을 위한 모듈이지만 추후 로깅 등 부수적인 작업을 진행할 모듈로 확장할 수 있을 것이다.)
src 폴더를 사용하지 않기 때문에 지우고 build.gradle만 남겨주었다.
4. support 모듈 - build.gradle
jacoco-report-aggregation 플러그인을 추가하고, dependencies에 테스트 결과를 통합할 모듈을 적어준다.
plugins {
id 'java'
id 'jacoco-report-aggregation'
}
group = 'com.dilly'
version = '0.0.1-SNAPSHOT'
repositories {
mavenCentral()
}
dependencies {
jacocoAggregation project(':packy-api')
jacocoAggregation project(':packy-domain')
}
test {
useJUnitPlatform()
}
bootJar.enabled = false
jar.enabled = true
testCodeCoverageReport 명령어를 다시 실행하면 아래와 같이 build/reports 폴더에 api 모듈과 domain 모듈의 테스트 리포트가 모두 들어가 있는 모습을 확인할 수 있다.
5. 테스트가 끝난 뒤 바로 jacocoTestReport 실행하기
finalizedBy는 test 태스크가 끝난 뒤 바로 testCodeCoverageReport를 실행하겠다는 의미이다.
build.gradle에 아래 코드를 추가해주면, 빌드를 한 뒤 자동으로 리포트를 생성할 수 있다.
test {
useJUnitPlatform()
finalizedBy 'testCodeCoverageReport'
}
Reference
https://docs.gradle.org/current/userguide/jacoco_report_aggregation_plugin.html