[Gradle] 빌드 스크립트 기본
2023. 3. 18. 22:17ㆍBuild Tools/Gradle
Hello world
tasks.register('hello') {
doLast {
println 'Hello world!'
}
}
커맨드 라인에서 gradle -q hello
를 실행하면 다음과 같은 결과가 나온다.
Hello world!
💡 -q 옵션은 Gradle의 로그 메시지를 숨겨주는 옵션이다.
알 수 있는 것
- Gradle의 task는
tasks.register(String) { … }
으로 등록한다. - task는
gradle [OPTIONS] [TASK_NAME]
으로 실행한다.
Build scripts are code
변수 사용하기
tasks.register('upper') {
doLast {
String someString = 'mY_nAmE'
println "Original: $someString"
println "Upper case: ${someString.toUpperCase()}"
}
}
gradle -q upper
의 실행 결과
Original: mY_nAmE
Upper case: MY_NAME
메서드 사용하기
tasks.register('1to5') {
doLast {
loop()
}
}
void loop() {
5.times { print "${it + 1}" }
}
반복하기
tasks.register('count') {
doLast {
4.times { print "$it " }
}
}
gradle -q count
의 실행 결과
0 1 2 3
Task dependencies
기본 dependsOn
tasks.register('hello') {
doLast {
println 'Hello world!'
}
}
tasks.register('intro') {
dependsOn tasks.hello
doLast {
println "I'm Gradle"
}
}
gradle -q intro
의 실행 결과
Hello world!
I'm Gradle
지연 dependsOn
tasks.register('taskX') {
dependsOn 'taskY'
doLast {
println 'taskX'
}
}
tasks.register('taskY') {
doLast {
println 'taskY'
}
}
gradle -q taskX
의 실행 결과
taskY
taskX
- task가 실행 중 dependsOn에 의해 의존하는 다른 task를 만나는 경우 현재 task의 작업은 미뤄진다.
Flexible task registration
- 반복문을 통해서 여러 개의 task를 등록할 수도 있다.
4.times { counter ->
tasks.register("task$counter") {
doLast {
println "I'm task number $counter"
}
}
}
gradle -q task1
의 실행 결과
I'm task number 1
Manipulating existing tasks
- task들이 등록됐을 때 API를 통해 task에 접근할 수 있다. 예를 들어 런타임에 동적으로 의존성을 task에 추가할 수도 있다.
4.times { counter ->
tasks.register("task$counter") {
doLast {
println "I'm task number $counter"
}
}
}
tasks.named('task0') { dependsOn('task2', 'task3') }
gradle -q task0
의 실행 결과
I'm task number 2
I'm task number 3
I'm task number 0
Action 추가하기
tasks.register('hello') {
doLast {
println 'Hello Earth'
}
}
tasks.named('hello') {
doFirst {
println 'Hello Venus'
}
}
tasks.named('hello') {
doLast {
println 'Hello Mars'
}
}
tasks.named('hello') {
doLast {
println 'Hello Jupiter'
}
}
gradle -q hello
의 실행 결과
Hello Venus
Hello Earth
Hello Mars
Hello Jupiter
- 위와 같이 액션을 추가하면 이는 task의 액션 리스트에 추가된다. 액션을 추가하는 경우 순서대로 실행된다.
Default Tasks
defaultTasks 'clean', 'run'
tasks.register('clean') {
doLast {
println 'Default Cleaning!'
}
}
tasks.register('run') {
doLast {
println 'Default Running!'
}
}
tasks.register('other') {
doLast {
println "I'm not a default task!"
}
}
gradle -q
의 실행 결과
Default Cleaning!
Default Running!
- 위의
gradle -q
는gradle -q clean run
과 같다.
External dependencies for the build script
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath group: 'commons-codec', name: 'commons-codec', version: '1,2'
}
}
buildscript()
메서드는 ScriptHandler
인스턴스가 구성한다. classpath
구성에 의존성을 추가함으로써 빌드 스크립트 클래스패스에 정의할 수 있다.
빌드 스크립트 경로를 선언하면 클래스 경로의 다른 클래스와 마찬가지로 빌드 스크립트의 클래스를 사용할 수 있다.
import org.apache.commons.codec.binary.Base64
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath group: 'commons-codec', name: 'commons-codec', version: '1.2'
}
}
tasks.register('encode') {
doLast {
def byte[] encodedString = new Base64().encode('hello world\n'.getBytes())
println new String(encodedString)
}
}
gradle -q encode
의 실행 결과
aGVsbG8gd29ybGQK
'Build Tools > Gradle' 카테고리의 다른 글
[Gradle] Windows에서 Intellij 프로젝트에서 Test 시 발생할 수 있는 오류 (0) | 2023.03.20 |
---|---|
[Gradle] 빌드 스크립트 더 배우기 (0) | 2023.03.18 |
[Gradle] Gradle 디렉터리 구조 (0) | 2023.03.18 |
[Gradle] 빌드 생명 주기 (0) | 2023.03.18 |
[Gradle] Gradle 기초 (0) | 2021.10.12 |