Gradle - Gradle 간단히 Task 작성하는 방법

2019. 10. 21. 20:47Web/Gradle

 

이번 포스팅은 간단하게 Gradle Task를 작성하는 방법이다. 모든 경우의 Task 작성 방법을 다루지는 않지만 몇가지 예제를 다루어볼 것이다.

 

1
2
3
4
5
task hello{
    doLast{
        println 'Hello'
    }
}
cs

 

위는 간단하게 'Hello'라는 문자열을 출력하는 태스크이다. 아래 명령으로 실행시킨다.

 

1
2
3
4
5
gradle -q hello
 
result->
Hello
 
cs

 

-q 옵션 같은 경우는 로그 출력없이 결과값만 출력하는 옵션이다. 만약 -q 옵션을 뺀다면 빌드에 걸린 시간등의 로그가 찍히게 된다.

 

디폴트 태스크 정의

gradle -q 라는 명령어로 실행하는 디폴트 태스크를 정의하는 방법이다. 보통 빌드전에 clean, install 등의 작업을 기계적으로 하는 경우가 많은데, 디폴트 태스크로 정의하여 사용하면 보다 간편하다.

 

1
2
//Default Task usecase : gradle -q
defaultTasks 'bye', 'variablePrint'
cs

 

 

태스크간 의존성

다음은 태스크간 의존성을 설정하는 방법이다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
//Task 의존성설정
task bye{
    dependsOn 'hello'
    doLast{
        println 'bye'
    }
}
 
task hello{
    doLast{
        println 'Hello'
    }
}
 
cs

 

위 태스크는 bye를 실행하기 전에 hello Task를 실행시키는 의존성을 설정하였다.

 

1
2
3
4
5
6
gradle -q bye
 
rsult->
Hello
bye
 
cs

 

태스크에서 변수사용 하기

태스크에서 사용자 정의 변수를 정의해서 사용가능하다. 결과값은 생략한다.

 

1
2
3
4
5
6
7
8
9
10
//변수사용방법
task variableTask{
    ext.myProperty = 'testProperty'
}
 
task variablePrint{
    doLast{
        println variableTask.myProperty
    }
}
cs

 

사용자 정의 메서드 사용하기

gradle은 groovy, kotlin 스크립트를 이용한 빌드툴이다. 즉, 변수선언은 물론 메서드를 정의해서 사용가능하다.

 

1
2
3
4
5
6
7
8
9
10
//메서드 사용
task methodTask{
    doLast{
        printStr('method args')
    }
}
 
String printStr(String arg){
    println arg
}
cs

 

빌드스크립트 자체에 의존성 라이브러리가 필요할 때

프로젝트가 사용하는 라이브러리는 물론, 빌드 스크립트 자체가 어떠한 외부 라이브러리가 필요할 때가 있다. 왜냐? gradle 자체는 groovy 언어로 작성하기 때문에 다른 외부 라이브러리를 사용가능하다!

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
/*
빌드스크립트 코드 자체가 외부 라이브러리를 필요로 할때
멀티 프로젝트 일 경우 루트 build.gradle에 선언하면
모든 하위 프로젝트 build.gradle에 반영된다.
 */
buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath group: 'commons-codec', name: 'commons-codec', version: '1.2'
    }
}
 
import org.apache.*
 
task encode{
    doLast{
        Base64.Encoder encoder = Base64.getEncoder()
        println encoder.encode(variableTask.myProperty.getBytes())
    }
}
cs

 

태스크 수행 순서 제어

태스크의 수행 순서를 제어하는 방법이다.

 

1
2
3
4
5
6
7
8
9
task taskX{
    println 'taskX'
}
 
task taskY{
    println 'taskY'
}
 
taskX.mustRunAfter taskY
cs

 

If문을 이용한 태스크 생략

if문을 이용하여 특정 태스크를 생략할 수 있다.

 

1
2
3
4
5
6
7
8
9
task conditionTask{
    doLast{
        println 'conditinal Task'
    }
}
 
conditionTask.onlyIf{!project.hasProperty('skip')}
 
>gradle -q -Pskip conditionTask
cs

 

태스크 비활성화

태스크를 지우고 싶진 않고, 당장은 사용하지 않아도 추후에 사용될 수도 있다면 비활성화 기능을 사용해보아도 좋을 듯하다.

 

1
2
3
4
5
6
7
task disableTask{
    doLast{
        println 'disabled'
    }
}
 
disableTask.enabled=true
cs

 

 

여기까지 간단하게 Task를 작성하는 방법을 다루어봤다. 사실 반복문등을 사용하는 것도 가능하다. 많은 태스크 예제가 있지만, 여기까지 간단하게 gradle task 작성방법의 맛을 보았다.