본문 바로가기
Gradle

[Gradle] Phase

by 개발자의 2025. 7. 10.

Gradle 빌드는 아래 이미지와 같이 3개의 Phase(단계)로 구성되어있다.

Gradle Build Phases

1. 초기화 단계 (Initialization Phase)

어떤 프로젝트(들)를 빌드할지 정하는 단계
멀티 프로젝트의 경우 이 단계에서 모든 하위 프로젝트 인식함.
  • settings.gradle.kts 실행
  • settings.gradle.kts 파일에서 project 변수 사용 불가. (project 객체가 초기화 되기 전 시점)
  • 이 단계에서 사용 가능한 변수 / 사용 파일 위치
    • gradle / settings.gradle.kts, build.gradle.kts
    • settings / settings.gradle.kts
    • rootProject / settings.gradle.kts (제한적 사용 가능.. 안된다고 이해하는게 좋을듯..)

2. 설정 단계 (Configuration Phase)

각 프로젝트의 빌드 스크립트를 해석하고 Task 그래프 구성
  • 빌드 스크립트(build.gradle.kts) 실행
  • Task 그래프를 구성 (= 어떤  작업을 실행할지 판단)
  • 이 단계에서 사용 가능한 변수 / 사용 파일 위치
    • gradle / settings.gradle.kts, build.gradle.kts
    • project(= this) / build.gradle.kts
    • rootProject / build.gradle.kts
    • allprojects / build.gradle.kts (프로젝트 루트)
    • subprojects / build.gradle.kts (프로젝트 루트)
    • extra (or ext) / build.gradle.kts
  • build.gradle.kts 파일에서 settings 변수 사용 불가.
    • 초기화 단계에서만 사용하도록 제한된 객체
  • 이 단계에서 Task들은 실행되지 않음, "등록"만 됨.
  • 이 단계에서 gradle.properties 를 다음 두 곳에 맵핑
    • project.properties
    • project.ext
※ 참고 : Gradle Property 적용 우선순위
1. 명령줄 인자 (ex> -PbuildMode=release): 가장 강력함. 이 값이 항상 우선 적용됨.
2. gradle.properties (프로젝트 루트) : 사용자 전역 설정보다 우선 적용됨.
3. gradle.properties (사용자 홈, 전역설정) : 프로젝트 개별 설정보다 후순위.
3. 시스템 환경변수 (ex> export buildMode=prod) : 쉘/OS 환경에서 설정한 값.
4. Java 시스템 속성 (ex> -DbuildMode=release) : JVM 실행시 설정값.

 

3. 실행 단계 (Execution Phase)

실제로 Task를 실행하는 단계
  • 명령(./gradlew build)에 따라서 필요한 Task "실행"
  • 이 단계에서 사용 가능한 변수 / 사용 파일 위치
    • gradle / settings.gradle.kts, build.gradle.kts
    • project / build.gradle.kts
    • rootProject / build.gradle.kts
  • doFirst, doLast 등의 Task 액션 사용 가능.