[Gradle] 빌드 스크립트 더 배우기

2023. 3. 18. 22:24Build Tools/Gradle

The Gradle build language

Gradle은 DSL을 제공한다.이 빌드 언어는 Groovy와 Kotlin으로 사용할 수 있다. Gradle은 각 빌드 스크립트를 UTF-8로 인코딩한 결과를 평가한다.

The Project API

빌드 스크립트는 프로젝트 를 구성하여 빌드를 설명한다 . 프로젝트는 추상적인 개념이지만 일반적으로 Gradle 프로젝트를 라이브러리나 애플리케이션과 같이 빌드해야 하는 소프트웨어 구성 요소에 매핑한다. 가지고 있는 각 빌드 스크립트는 Project 유형의 개체와 연결되며 빌드 스크립트가 실행될 때 이 Project를 구성합니다 .

실제로 빌드 스크립트의 거의 모든 최상위 프로퍼티와 블록은 Project API에 포함되어 있다.

println name
println project.name

gradle -q의 실행 결과

app
app

println은 같은 프로퍼티를 출력한다. 첫 번째는 Project 객체의 name 프로퍼티를 참조하는 최상위 레벨을 사용한다. 다른 줄은 Project 객체와 연관된 Project 객체를 반환하는 모든 빌드 스크립트에서 사용할 수 있는 속성을 사용한다. Project 객체의 멤버로써 같은 이름을 사용하는 프로퍼티나 메서드를 정의하고 싶다면 project 프로퍼티를 사용해야 한다.

표준 project 프로퍼티

이름 타입 기본값
project Project Project 인스턴스
name String 프로젝트 디렉터리의 이름
path String 프로젝트의 절대 경로
description String 프로젝트의 설명
projectDir File 빌드 스크립트를 포함하는 디렉터리
buildDir File projectDir/build
group Object unspecified
version Object unspecified
ant AntBuilder AntBuilder 인스턴스

변수 선언

지역 변수

def dest = 'dest'

tasks.register('copy', Copy) {
    from 'source'
    into dest
}

부가 프로퍼티

Gradle 도메인 모델의 모든 향상된 객체는 부가적인 사용자 정의 프로퍼티를 가질 수 있다. 이는 단지 projects, tasks, sourceSets에 제한되지 않는다.

부가 프로퍼티는 객체가 소유한 ext 프로퍼티를 통해 추가되고, 읽고 설정할 수 있다. 또는 ext 블록을 사용하여 한 번에 여러 프로퍼티를 추가할 수 있다.

plugins {
    id 'java-library'
}

// project 객체의 부가 프로퍼티 추가
ext {
    springVersion = "3.1.0.RELEASE"
    emailNotification = "build@master.org"
}

sourceSets.all { ext.purpose = null }

sourceSets {
    main {
        purpose = "production"
    }
    test {
        purpose = "test"
    }
    plugin {
        purpose = "production"
    }
}

tasks.register('printProperties') {
    doLast {
        println springVersion
        println emailNotification
        sourceSets.matching { it.purpose == "production" }.each { println it.name }
    }
}

gradle -q printProperties의 실행 결과

3.1.0.RELEASE
build@master.org
main
plugin

Configuring arbitrary objects

임의적인 객체를 구성할 수도 있다.

import java.text.FieldPosition

tasks.register('configure') {
    doLast {
        def pos = configure(new FieldPosition(10)) {
            beginIndex = 1
            endIndex = 5
        }
        println pos.beginIndex
        println pos.endIndex
    }
}

gradle -q configure의 실행 결과

1
5
⚠️ 이 기능은 현재 Groovy 스크립트에서만 지원하며 Kotlin DSL에선 지원하지 않는다.