이 문서는 Gradle init을 사용하여 Java 앱을 생성하는 과정에 대해서 소개합니다.
우선 Gradle과 IntelliJ 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
코드 | 비고 | |
Gradle에서 생성한 프로젝트 별 |
||
Gradle Wrapper의 JAR 파일과 환경 설정을 포함합니다. | ||
Gradle Wrapper를 사용해 빌드하기 위한 macOS 또는 Linux 스크립트입니다. | ||
Gradle Wrapper를 사용해 빌드하기 위한 Windows 스크립트입니다. | ||
프로젝트의 하위 프로젝트가 정의된 settings file입니다. | ||
자바 앱에 대한 소스 코드와 빌드 구성입니다. | ||
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 프로젝트 |
- | ||
- | ||
개별 |
개별 |
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")
코드 | 비고 | |
루트 프로젝트의 이름은 |
||
tutorial 프로젝트는 하위 프로젝트 |
모든 하위 프로젝트는 개별 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파일은 빌드에 필요한작업(Task)의존성(Dependencies)플러그인(Plugins)등을 정의합니다.
'Build > Gradle' 카테고리의 다른 글
Gradle 도큐먼트: Gradle 플러그인(Plugins) 적용하기 (0) | 2023.11.15 |
---|---|
Gradle 도큐먼트: 의존성(Dependencies) 관리 (0) | 2023.11.15 |
Gradle 도큐먼트: 작업(Tasks) 실행하기 (0) | 2023.11.14 |
Gradle 도큐먼트: macOS에서 Gradle 설치하기 (0) | 2023.11.02 |
Gradle 도큐먼트: Gradle 기본 개념 (0) | 2023.11.02 |