build.gradle의 task
build.gradle의 task는 Project 객체의 메서드이다. task는 task이름과 람다식을 인자로 받으며, 이 task는 gradle [task 이름]을 통해 수행 가능해진다.
build.gradle에 커스텀 task 만들기
build.gradle에는 메서드와 같이 커스텀 task를 만들 수도 있다. 커스텀 task는 다음의 문법으로 만들어진다. task 자체가 메서드이며, task의 인자로 task 이름이 넘어간다.
task [task 이름] {
[task에서 수행할 람다식]
}
Groovy는 다양한 방식으로 task를 만들 수 있다. 이는 Groovy의 특수한 문법 때문인데, String에서 ""을 생략하고도 쓸 수 있고 메서드를 수행하기 위해 [메서드명] [인자] 와 같이 쓰는 방식은 물론 [메서드명]([인자]) 와 같이 쓸 수도 있어 그렇다. 개인적으로 Groovy를 좋아하지 않는 이유가 너무 다양한 방식으로 메서드를 실행할 수 있게 때문이다.
예를 들어 blog이름을 프린트하는 printBlogName task를 다음과 같이 여러 방식으로 생성할 수 있다.
project.task printBlogName {
println project.blogName
}
task printBlogName {
println project.blogName
}
task("printBlogName"){
println project.blogName
}
task(printBlogName){
println project.blogName
}
build.gradle의 task의 동작 시기
Gradle은 Initialization, Configuration, Execution 과정을 순서대로 수행해서 작업을 수행한다. 만약 이것에 대해 잘 모른다면 다음글을 살펴보길 바란다.
Task는 기본적으로 Configuration 시 동작한다. 하지만,람다식에 추가적으로 doFirst { }, doLast { } 메서드 블록을 넣어 Execution 시 동작하도록 수정할 수 있다.
task("gradleCustomTask"){
println("Do on Configuration")
doFirst {
println("Do on First Execution")
}
doLast {
println("Do on Last Execution")
}
}
위의 task를 gradle sampleTask 를 이용해 수행하면 다음과 같이 결과가 나온다. Configure project(Configuration 단계)에서 Task on Configuration이 수행되고, Task(Execution 단계)에서 Task on Execution이 수행되는 것을 확인할 수 있다.
$ gradle gradleCustomTask
> Configure project :app
Do on Configuration
> Task :app:sampleTask
Do on First Execution
> Task :app:sampleTask
Do on Last Execution
task chaining하기
Gradle Task를 Chaining하기 위해서는 task의 프로퍼티에 dependsOn과 finalizedBy를 추가하면 된다. dependsOn은 특정 Task 와 같이 실행되도록 하며, finalizedBy는 특정 Task이후에 수행되도록 만드는 Task객체의 프로퍼티이다.
예를 들어 다음과 같이 수행할 수 있다.
task("gradleCustomTask") {
doFirst { println("Do on First Execution") }
doLast { println("Do on Last Execution") }
}
task("cleanFiles"){
doLast {
println("cleaned")
}
}
task("configureProperties"){
project.ext.blogName = "Kotlin World"
println("configure finished")
}
gradleCustomTask.dependsOn configureProperties
gradleCustomTask.finalizedBy cleanFiles
위에서 gradleCustomTask 를 실행하면 다음과 같은 결과가 나온다.
$ gradle gradleCustomTask
> Configure project :
Do on Configuration
configure finished
> Task :gradleCustomTask
Do on First Execution
Do on Last Execution
> Task :cleanFiles
cleaned
default task 설정하기
기본적으로 실행되는 task를 설정하기 위해서는 project 오브젝트의 defaultTasks 프로퍼티를 설정하면 된다.
project.defaultTasks "[Default Task명]"
예를 들어 바로 위 예제의 마지막줄에 project.defaultTasks "gradleCustomTask" 을 추가하면 gradleCustomTask가 기본 Task가 된다.
task("gradleCustomTask") {
doFirst { println("Do on First Execution") }
doLast { println("Do on Last Execution") }
}
task("cleanFiles"){
doLast {
println("cleaned")
}
}
task("configureProperties"){
project.ext.blogName = "Kotlin World"
println("configure finished")
}
gradleCustomTask.dependsOn configureProperties
gradleCustomTask.finalizedBy cleanFiles
project.defaultTasks "gradleCustomTask"
위와 같이 설정되면 gradle만으로 Task가 실행된다.
$ gradle
> Configure project :
configure finished
> Task :gradleCustomTask
Do on First Execution
Do on Last Execution
> Task :cleanFiles
cleaned