그레이들 주요 개념

Project : 전체 빌드 컨테이너

Build Script : 빌드 시 수행되는 스크립트

Tasks : 빌드 스크립트에 추가할 수 있는 개별적인 작업 유닛

Plugins : 유용한 빌드 기능을 제공하는 패키지된 컴포넌트

Gradle Wrapper : gradle project에 gradle을 설치하고, 빌드 및 task를 수행하는 스크립트

Build : 빌드 후 생성된 파일, 아티팩트를 보관하는 디렉토리

Gradle Daemon : Gradle이 내부적으로 빌드 실행 간 성능 향상을 위해 사용하는 자바 프로세스

Project

그레이들에서 Project는 빌드할 애플리케이션 전체를 나타내는 고수준 개념임(gradle build와 gradle project는 동의어)

스프링 부트 프로젝트가 있으면 Gradle Project에 포함되어 gradle 빌드 시 스프링 부트 애플리케이션을 빌드함

settings.gradle : 그레이들 프로젝트를 생성하는 파일

rootProject.name 속성에다가 프로젝트 이름을 지정할 수 있는데, 해당 프로젝트의 디렉토리와 다른 이름을 가져도 됨

필수 지정 값은 아니지만 일관된 프로젝트 이름을 유지할 수 있음

step 1

Build Script

프로젝트에 무언가를 선언하거나 실행하고자 할 때 (애플리케이션 빌드) build script에 추가하면 됨

build script가 실질적으로 프로젝트를 구성하는 데 사용됨

보통 task, plugin, dependency 등을 추가함

step 2

Tasks

빌드 스크립트에 추가할 수 있는 개별적인 작업 유닛

여러 가지의 task를 추가해서 빌드 스크립트를 구성할 수 있음

task 사용 방법

Copy task(Gradle에서 제공) 예시

tasks.register<Copy>("copyHello") {
    from("source 파일 위치")
    into("복사할 위치")
}

step 3

Plugins

plugin은 미리 정의된 tasks, 도메인 객체, 컨벤션 등으로 구성된 컴포넌트로 빌드 스크립트에 추가할 수 있음

plugin을 gradle project에 추가하면 자동적으로 task들이 등록됨

크게 세 가지로 나뉨

예시

plugins {
    java
}

Legacy apply plugins syntax

core 플러그인을 적용할 때 버전을 명시하지 않음

3rd party 플러그인을 적용할 땐 버전을 명시해야 됨

레거시 플러그인 적용 문법을 사용하면 최적화가 되지 않음

// apply core plugin using legacy syntax
apply(plugin = "base")

// apply 3rd party plugin using legacy syntax
buildscript {
    repositories {
        maven {
            url = uri("https://plugins.gradle.org/m2/")
        } }
    dependencies {
        classpath("group.artifact:version")
    } 
}

Configuration plugin

몇몇 plugin들은 configuration 기능을 지원함

지원하는 plugin은 별도 확인 필요

base {
      archivesName.set("stuff")
}

step 4

Gradle Wrapper

Build directory

gradle이 프로젝트 아티팩트를 생성하는 기본 디렉토리임

프로젝트 아티팩트

gradle build directory == maven target directory

전체 Gradle 프로젝트 구조

project
- .gradle/
- build/
- build.gradle.kts
- buildSrc
- gradle/
    - wrapper/
        - gradle-wrapper.jar
        - gradle-wrapper.properties
- gradle.properties
- gradlew
- gradlew.bat
- settings.gradle.kts

.gradle : gradle이 해당 프로젝트에서 내부적으로 사용하는 디렉토리

buildSrc(optional) : build.gradle 대신 빌드 로직를 중앙화/캡슐화할 때 사용하는 디렉토리

gradle.properties(optional) : 해당 프로젝트에서 사용하는 프로퍼티(gradle property, 커스텀 property)

참고사항

Gradle Daemon

Gradle이 내부적으로 빌드 실행 간 성능 향상을 위해 사용하는 자바 프로세스

gradle command를 실행하면 실제로는 daemon을 사용해서 build가 수행됨

daemon 장점

gradle --status : 로컬 환경에 띄워진 daemon 출력

gradle --stop : 동작 중인 daemon stop 명령