[Packy] 멀티 모듈 프로젝트에서 jacoco test report 통합하여 연동하기

반응형

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

반응형