CI\CD/Gradle

Gradle이 동작하는 순서와 Gradle Task가 동작하는 방식 알아보기

반응형

Gradle이 동작하는 순서

 

그림1. gradle이 동작하는 순서

 

Gradle은 Initialization, Configuration, Execution 세가지 Step을 통해 작업을 수행한다.

 

💡 Gradle이 동작하는 순서
1. Initialization 
2. Configuration
3. Execution

 

 

Initialization

Initialization step에서는 gradle은 settings.gradle.kts를 읽어 프로젝트 이름이 무엇인지, 프로젝트에는 어떤 모듈들이 있는지를 확인한다. 멀티 모듈 프로젝트 일 때는 각 모듈 별로 build.gradle.kts 파일이 있는지 이 단계에서 확인한다.

 

예를 들어 settings.gradle.kts가 다음과 같을 때를 살펴보자.

rootProject.name = "KotlinProject"
include("app")
include("app-repository")

이때 Initialization 단계에서는 프로젝트의 이름이 KotlinProject라는 것을 확인하고, 모듈은 app과 app-repository란 것을 확인한 후 각 모듈 폴더 안에 build.gradle.kts가 있는지 확인한다.

 

 

Configuration

Gradle 작업을 하기 위해 필요한 Gradle Task를 순차적으로 수행한다. 보통 라이브러리를 가져오는 작업이나, 프로젝트를 Configure하는 작업들이 이 단계에서 수행된다. 예를들어 build.gradle의 dependency block에서 library들을 가져오는 작업들이 이 단계에서 수행된다.

 

Configuration 단계의 작업은 > Configure project :[모듈명]으로 뜬다. 만약  app 모듈이라면 화면에는 다음과 같이 뜬다.

 

그림1. Configuration

 

> Configure project :app
Task on Configuration

 

 

Execution

Compile 을 하거나 Test를 하거나 패키징하는 작업(jar, war, aab, apk)을 Execution 단계에서 한다. Annotation Processing을 통한 Code gen 작업, Kotlin이나 Java 파일을 바이트 코드로 변환하는 작업(Compile), 변환된 바이트 코드를 사용해 테스트하거나 패키징을 하는 작업등이 모두 이 단계에서 수행된다.

 

[그림1]의 > Task가 붙어서 나오는 task 들이 바로 Execution 작업이다. 아래에 보면 compile 작업과 리소스를 가져오는 작업들이 이 단계에서 수행되는 것을 확인할 수 있다.

 

> Task :app:compileKotlin UP-TO-DATE
> Task :app:compileJava NO-SOURCE
> Task :app:processResources NO-SOURCE
> Task :app:classes UP-TO-DATE

 


Gradle Task는 Configuration 단계와 Execution 단계에서 수행된다. 

Gradle Task의 기본 블록은 Configuration 단계에서 수행되지만, doFirst { }, doLast { } 메서드 블록은 Execution 단계에서 수행된다.

 

예를 들어 아래와 같이 task를 만들어보자. 

task("sampleTask"){
    println("Task on Configuration")

    doFirst {
        println("Task on Execution")
    }
}

 

위의 task를 gradle sampleTask 를 이용해 수행하면 다음과 같이 결과가 나온다. Configure project(Configuration 단계)에서 Task on Configuration이 수행되고, Task(Execution 단계)에서 Task on Execution이 수행되는 것을 확인할 수 있다. 

$ gradle sampleTask

> Configure project :app
Task on Configuration

> Task :app:sampleTask
Task on Execution
반응형

 

이 글의 저작권은 Kotlin World 에 있습니다. 글, 이미지 무단 재배포 및 변경을 금지합니다.