본문 바로가기

Build/Gradle

Gradle 도큐먼트: Gradle 프로젝트 시작하기

더보기

이 문서는 Gradle init을 사용하여 Java 앱을 생성하는 과정에 대해서 소개합니다.

우선 GradleIntelliJ IDEA가 설치되어 있어야합니다.

Community Edition에 해당하는 IntelliJ IDEA 무료 버전에서도 Gradle 프로젝트를 이용 할 수 있습니다.

Step 1: Gradle 프로젝트 시작하기

Gradle 설치 여부를 확인하기 위해서 콘솔에서 gradle을 입력합니다.

$ gradle

Welcome to Gradle 8.2.

Directory '/' does not contain a Gradle build.

To create a new build in this directory, run gradle init

Gradle을 설치하지 않았다면 installation section을 참고합니다.

콘솔을 사용하여 tutorial 디렉토리를 생성하고 이동합니다.

$ mkdir tutorial
$ cd tutorial

디렉토리에서 gradle init을 입력하고 다음과 같이 명령 프롬프트를 진행합니다.

$ gradle init

Select type of project to generate:
  1: basic
  2: application
  3: library
  4: Gradle plugin
Enter selection (default: basic) [1..4] 2

Select implementation language:
  1: C++
  2: Groovy
  3: Java
  4: Kotlin
  5: Scala
  6: Swift
Enter selection (default: Java) [1..6] 3

Generate multiple subprojects for application? (default: no) [yes, no] no
Select build script DSL:
  1: Kotlin
  2: Groovy
Enter selection (default: Kotlin) [1..2] 1

Select test framework:
  1: JUnit 4
  2: TestNG
  3: Spock
  4: JUnit Jupiter
Enter selection (default: JUnit Jupiter) [1..4] 4

Project name (default: tutorial): tutorial
Source package (default: tutorial): com.gradle.tutorial
Enter target version of Java (min. 7) (default: 17): 17
Generate build using new APIs and behavior (some features may change in the next minor release)? (default: no) [yes, no] no
더보기

이 예제에서 Kotlin DSL은 간단한 자바 프로젝트를 빌드하는데 사용됩니다(Kotlin은 Gradle 8.2에서의 기본 DSL입니다).

예제는 macOS를 기준으로 작성됩니다.

명령 프롬프트를 따라서 진행하였다면 tutorial 디렉토리는 다음과 같이 구성됩니다.

$ tree
.
├── .gitattributes
├── .gitignore
├── .gradle
│   └── file-system.probe
├── app
│   ├── build.gradle.kts
│   └── src
│       ├── main
│       │   ├── java
│       │   │   └── com
│       │   │       └── gradle
│       │   │           └── tutorial
│       │   │               └── App.java
│       │   └── resources
│       └── test
│           ├── java
│           │   └── com
│           │       └── gradle
│           │           └── tutorial
│           │               └── AppTest.java
│           └── resources
├── gradle
│   └── wrapper
│       ├── gradle-wrapper.jar
│       └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
└── settings.gradle.kts
코드 비고
Line 5 .gradle Gradle에서 생성한 프로젝트 별 캐시 파일입니다.
Line 24:27 gradle Gradle Wrapper의 JAR 파일과 환경 설정을 포함합니다.
Line 28 gradlew Gradle Wrapper를 사용해 빌드하기 위한 macOS 또는 Linux 스크립트입니다.
Line 29 gradlew.bat Gradle Wrapper를 사용해 빌드하기 위한 Windows 스크립트입니다.
Line 30 settings.gradle.kts 프로젝트의 하위 프로젝트가 정의된 settings file입니다.
Line 7 app 자바 앱에 대한 소스 코드와 빌드 구성입니다.
... .gitignore와 같은 일부 추가 Git 파일이 있을 수 있습니다.

Step 2: Gradle Wrapper

Gradle Wrapper는 Gradle 빌드를 위한 도구로, 빌드에서 선언된 특정 버전의 Gradle을 다운로드하고 실행합니다.

예제의 tutorial 프로젝트에서 Gradle Wrapper가 사용하는 파일은 다음과 같습니다.

  • gradlew는 macOS 또는 Linux 환경에서 빌드를 위한 셸(Shell) 스크립트입니다.
  • gradlew.bat는 Windows 환경에서 빌드를 위한 배치 스크립트입니다.
더보기

Gradle을 직접 사용하는대신 Gradle Wrapper를 사용하면 시스템에서 Gradle을 설치하지 않고도 Gradle 빌드 기능을 사용 할 수 있습니다.

또한 서로 다른 개발 환경과 CI 머신 간에서 동일한 버전의 Gradle 버전을 사용하도록 보장합니다.

Step 3: Gradle Wrapper 실행

macOS 또는 Linux 환경에서 ./gradlew으로 Gradle Wrapper를 사용합니다. 프로젝트의 루트 디렉토리 tutorial에서 다음 명령문을 실행합니다.

$ ./gradlew build

Windows 환경에서는 gradlew.bat으로 사용합니다.

$ gradlew.bat build
더보기

Gradle Wrapper를 실행하면 Gradle 바이너리를 다운로드하고 캐시에 저장합니다.

버전에 맞는 바이너리가 이미 존재하면 이 과정은 생략됩니다.

빌드를 위해서 새로운 버전의 Gradle을 찾고 설치하는 과정을 사용자가 신경쓰지 않기 때문에 빠르게 개발하고 배포 할 수 있습니다.

Gradle Wrapper를 사용해서 Gradle을 실행하였습니다. app 디렉토리에서 새로 생성된 build 디렉토리를 확인 할 수 있습니다.

$ tree
.
├── app
│   ├── build
... (중략) ...
│   ├── build.gradle.kts
... (중략) ...
│   └── src
... (중략) ...
├── gradle
│   └── wrapper
│       ├── gradle-wrapper.jar
│       └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
└── settings.gradle.kts

빌드 프로세스에서 생성되는 모든 파일은 별도로 지정하지 않았다면 build 디렉토리에 포함됩니다.

Gradle에서는 표준 구조를 정의하고 있습니다. Gradle 표준tutorial 프로젝트를 비교하면 다음과 같습니다.

구분 Gradle 표준 tutorial 프로젝트
루트 디렉토리
settings.gradle.kts 파일이 있습니다.
settings.gradle.kts 파일이 있습니다.
루트 프로젝트가 존재합니다. 루트 프로젝트가 존재합니다.
루트 프로젝트
하위 프로젝트가 존재 할 수 있습니다. 하위 프로젝트가 존재 할 수 있습니다.
build.gradle.kts를 갖을 수 있지만 권장하지는 않습니다. -
libs.version.toml는 의존성 관리를 위한 버전 카탈로그입니다.
-
하위 프로젝트
개별 build.gradle.kts를 갖습니다. 개별 build.gradle.kts를 갖습니다.

Step 4: 빌드 설정 및 스크립트 파일 살펴보기

프로젝트는 하나 이상의 하위 프로젝트로 구성됩니다.

settings.gradle.kts는 빌드에 포함되는 하위 프로젝트를 정의합니다.

plugins {
    // Apply the foojay-resolver plugin to allow automatic download of JDKs
    id("org.gradle.toolchains.foojay-resolver-convention") version "0.7.0"
}

rootProject.name = "tutorial"
include("app")
코드 비고
Line 6 rootProject.name = "tutorial" 루트 프로젝트의 이름은 tutorial입니다.
Line 7 include("app") tutorial 프로젝트는 하위 프로젝트 app을 포함하고 있습니다.

모든 하위 프로젝트는 개별 build.gradle.kts를 갖습니다.

이 파일은 빌드 프로세스의 핵심 구성 요소로 프로젝트를 빌드하기 위해서 필요한 작업(Tasks)를 정의합니다.

plugins {
    // Apply the application plugin to add support for building a CLI application in Java.
    application
}

repositories {
    // Use Maven Central for resolving dependencies.
    mavenCentral()
}

dependencies {
    // Use JUnit Jupiter for testing.
    testImplementation("org.junit.jupiter:junit-jupiter:5.9.1")

    // This dependency is used by the application.
    implementation("com.google.guava:guava:32.1.2-jre")
}

// Apply a specific Java toolchain to ease working on different environments.
java {
    toolchain {
        languageVersion.set(JavaLanguageVersion.of(17))
    }
}

application {
    // Define the main class for the application.
    mainClass.set("com.gradle.tutorial.App")
}

tasks.named<Test>("test") {
    // Use JUnit Platform for unit tests.
    useJUnitPlatform()
}

정리 및 복습

  • Gradle 프로젝트를 생성하려면 gradle init을 사용합니다.
  • Gradle Wrapper는 Gradle 빌드 도구입니다. 
더보기

Gradle Wrapper를 사용하면 버전에 맞는 Gradle 바이너리를 자동으로 다운로드하고 캐시에 저장합니다.

서로 다른 개발 환경과 CI 머신에서 Gradle 버전을 새로 설치하고 관리 할 필요가 없어 빠르게 개발하고 배포 할 수 있습니다.

  • Gradle 프로젝트를 빌드하려면 macOS 또는 Linux 환경에서 ./gradlew build를 사용합니다. Windows 환경에서는 /gradlew.bat build를 사용합니다.
더보기

Gradle에서 정의하는 Gradle 표준 구조는 다음과 같습니다.

구분 Gradle 표준
루트 디렉토리
settings.gradle.kts 파일이 있습니다.
루트 프로젝트가 존재합니다.
루트 프로젝트
하위 프로젝트가 존재 할 수 있습니다.
build.gradle.kts를 갖을 수 있지만 권장하지는 않습니다.
libs.version.toml는 의존성 관리를 위한 버전 카탈로그입니다.
하위 프로젝트 개별 build.gradle.kts를 갖습니다.
  • 프로젝트의 빌드 설정 파일 settings.gradle.kts는 루트 프로젝트의 이름, 빌드에 포함되는 하위 프로젝트 등을 정의합니다.
  • 하위 프로젝트의 build.gradle.kts 파일은 빌드에 필요한 작업(Task) 의존성(Dependencies) 플러그인(Plugins) 등을 정의합니다.