Gradle은 의존성 기반 프로그래밍의 한 예로, 태스크와 태스크 간의 의존성을 정의한다. Gradle은 이 태스크들이 의존성 순서대로 실행되도록 보장한다. 빌드 스크립트와 플러그인은 의존성 그래프(dependency graph)를 구성한다.
Gradle은 테스크를 실행하기 전에 태스크 그래프를 빌드한다. 구성 회피 기능(configuration avoidance)을 사용하면 현재 빌드에 포함되지 않은 태스크에 대한 구성을 건너뛴다.
이 다이어그램은 추상적인 태스크 그래프와 구체적인 태스크 그래프를 보여준다. 태스크간의 의존성은 화살표로 표시된다.
Project
인스턴스를 생성한다.다음 예는 설정 파일 및 빌드 파일의 어느 부분이 어떤 빌드 단계에 해당되는지 보여준다.
// settings.gradle
rootProject.name = 'basic'
println '초기화 단계에서 실행된다'
// build.gradle
println '구성 단계에서 실행된다.'
tasks.register('configured') {
println '구성은 빌드에 사용되기 때문에 구성 단계에서 실행된다.'
}
tasks.register('test') {
doLast {
println '실행 단계에서 실행된다.'
}
}
tasks.register('testBoth') {
doFirst {
println '실행 단계에서 첫번째로 실행된다.'
}
doLast {
println '실행 단계에서 마지막에 실행된다.'
}
println 'testBoth는 빌드에서 사용되기 때문에 구성 단계에서 실행된다.'
}
Gradle은 자주 사용되는 기능의 자동화를 의도적으로 거의 제공하지 않는다. Java 코드 컴파일과 같은 모든 유용한 기능은 플러그인을 통해 추가된다. 플러그인은 새로운 작업(예: JavaCompile), 도메인 객체(예: SourceSet), 규칙(예: Java 소스는 src/main/java에 위치)을 추가한다.
빌드 스크립트에 로직을 추가하는 대신 플러그인을 적용하면 여러 가지 이점을 얻을 수 있다
플러그인에 캡슐화된 빌드 로직을 사용하려면 Gradle은 두 단계를 수행해야 한다. 먼저 플러그인을 확인한 다음 플러그인을 대상(일반적으로 프로젝트)에 적용해야 한다.
플러그인을 확인한다는 것은 해당 플러그인이 포함된 올바른 버전의 jar를 찾아 스크립트 클래스 경로에 추가하는 것을 의미한다. 플러그인이 확인되면 해당 API를 빌드 스크립트에서 사용할 수 있다.
플러그인을 적용한다는 것은 해당 플러그인의 Plugin.apply(T)
를 실제로 실행하는 것을 의미한다. 플러그인 적용은 멱등성이 있다. 즉, 어떤 플러그인이든 사이드이펙트 없이 안전하게 여러 번 적용할 수 있다는 것이다.
플러그인의 가장 일반적인 용례는 플러그인을 리졸브하고 현재 프로젝트에 적용하는 것이다. 일반적인 용례이므로 빌드 작성자는 플러그인 DSL을 사용하여 플러그인 리졸브와 적용을 한 번에 수행하는 것이 좋다.