이 문서의 내용
Gradle은 빌드를 다양한 방면으로 최적화합니다. Gradle의 최적화 방법 중 하나로 증분 빌드(Incremental build)가 있습니다.
Incremental build를 사용하면 이전 빌드 이후로 입력이 변경되지 않은 Task를 실행하지 않습니다.
이 문서의 시작에 앞서 이 블로그의 문서: Gradle 플러그인(Plugin) 적용하기를 선행해야 합니다.
Incremental build가 동작하려면 Task는 입력(Input)과 출력(Output)으로 정의되어야 합니다.
빌드가 진행 될 때 Gradle은 Input과 Output에 변경 사항이 있는지 검사합니다.
I/O에 변경 사항이 있다면 빌드를 진행할 것이고, 변경 사항이 없다면 해당 Task는 진행하지 않고 건너뜁니다.
Incremental build 사용하기
Incremental build를 확인하기 위해서 콘솔에서 출력되는 내용을 확장합니다.
tutorial 프로젝트의 루트 디렉토리에서 gradle.properties 파일을 생성합니다.
$ touch gradle.properties
파일에 org.gradle.console=verbose 프로퍼티를 추가합니다.
org.gradle.console=verbose
./gradlew :app:clean :app:build를 실행해 clean과 build Task를 수행합니다.
$ ./gradlew :app:clean :app:build
> Task :app:clean
> Task :app:compileJava
> Task :app:processResources NO-SOURCE
> Task :app:classes
> Task :app:jar
> Task :app:startScripts
> Task :app:distTar
> Task :app:distZip
> Task :app:assemble
> Task :app:compileTestJava
> Task :app:processTestResources NO-SOURCE
> Task :app:testClasses
> Task :app:test
> Task :app:check
> Task :app:build
BUILD SUCCESSFUL in 1s
8 actionable tasks: 8 executed
Gradle이 모든 Task를 호출하였으며 성공적으로 진행되었습니다.
다시 한번 ./gradlew :app:build를 실행하고 콘솔에서 출력되는 로그의 차이점을 확인합니다.
$ ./gradlew :app:build
> Task :app:compileJava UP-TO-DATE
> Task :app:processResources NO-SOURCE
> Task :app:classes UP-TO-DATE
> Task :app:jar UP-TO-DATE
> Task :app:startScripts UP-TO-DATE
> Task :app:distTar UP-TO-DATE
> Task :app:distZip UP-TO-DATE
> Task :app:assemble UP-TO-DATE
> Task :app:compileTestJava UP-TO-DATE
> Task :app:processTestResources NO-SOURCE
> Task :app:testClasses UP-TO-DATE
> Task :app:test UP-TO-DATE
> Task :app:check UP-TO-DATE
> Task :app:build UP-TO-DATE
BUILD SUCCESSFUL in 409ms
7 actionable tasks: 7 up-to-date
대부분의 Task가 UP-TO-DATE 레이블과 함께 출력되었습니다.
UP-TO-DATE는 Gradle이 Task의 I/O의 변경을 감지하지 못해 Task를 수행하지 않고 건너뛰었음을 의미합니다.
레이블(Labels) 유형
Gradle 프로퍼티 org.gradle.console=verbose가 활성 상태에서 표시되는 레이블은 다음 4가지입니다.
레이블(Outcome labels) | 비고 |
Task가 |
|
Task |
|
필요한 |
콘솔에서 레이블을 표시하도록 되어있으나 레이블이 없으면 Task가 새로 실행된 경우입니다.
정리 및 복습
- Gradle의 빌드 최적화 중 하나는
증분 빌드(Incremental build)입니다. - Incremental build는
Task의 입력(Input)과 출력(Output)에 변경 사항이 없을 때수행하지 않고 건너뛰게 됩니다. - Gradle 프로젝트에서 프로퍼티를 적용하려면 루트 디렉토리에
gradle.properties를 생성합니다. - 프로퍼티
org.gradle.console=verbose는 Gradle 명령문에서 레이블을 표시합니다. - 표시되는 레이블은
UP-TO-DATESKIPPEDFROM-CACHENO-SOURCE가 있습니다. - 레이블이 등록되지 않은 Task는 Gradle에 의해서 새로 실행된 경우입니다.
'Build > Gradle' 카테고리의 다른 글
"Cannot add task 'wrapper' as a task with that name already exists" 오류 (0) | 2023.11.17 |
---|---|
Gradle 도큐먼트: 빌드 최적화를 위한 로컬 빌드 캐시(Local build cache)와 원격 빌드 캐시(Remote build cache) (0) | 2023.11.16 |
Gradle 도큐먼트: Gradle 플러그인(Plugins) 적용하기 (0) | 2023.11.15 |
Gradle 도큐먼트: 의존성(Dependencies) 관리 (0) | 2023.11.15 |
Gradle 도큐먼트: 작업(Tasks) 실행하기 (0) | 2023.11.14 |