Files
gradle-examples/doc/08_build.gradle.kts.md
2025-02-22 01:13:24 +09:00

174 lines
5.2 KiB
Markdown

# Gradle Kotlin DSL (`build.gradle.kts`) 주요 블록
Gradle에서 **Kotlin DSL**을 사용하면 `build.gradle.kts` 파일로 프로젝트를 구성할 수 있다.
이 파일에는 **빌드 설정, 의존성 관리, 플러그인 추가, 태스크 정의** 등의 내용이 포함된다.
| 블록 | 설명 |
|------|-------------------------------|
| `plugins` | 프로젝트에서 사용할 플러그인을 정의 |
| `group` & `version` | 프로젝트의 그룹 ID와 버전 정보 설정 |
| `repositories` | 의존성을 다운로드할 저장소 지정 |
| `dependencies` | 프로젝트에서 사용할 라이브러리 추가 |
| `application` | 실행할 `mainClass` 지정 (`application` 플러그인 사용 시) |
| `tasks` | 사용자 정의 태스크 추가 |
| `java` | Java 프로젝트의 컴파일러 버전 설정 |
| `jar` | JAR 파일의 메타데이터 설정 |
| `publishing` | 프로젝트를 Maven 저장소에 배포 |
| `wrapper` | Gradle Wrapper의 버전 관리 |
## `plugins` 블록
`plugins` 블록은 **프로젝트에서 사용할 플러그인**을 선언하는 곳이다.
Gradle 플러그인은 빌드 시스템의 기능을 확장하는 역할을 한다.
```kotlin
plugins {
java // Java 프로젝트를 위한 플러그인
application // 실행 가능한 애플리케이션을 위한 플러그인
kotlin("jvm") version "1.9.0" // Kotlin JVM 플러그인
}
```
- `java` → Java 프로젝트를 빌드하는 데 필요
- `application` → 실행 가능한 애플리케이션을 위한 플러그인
- `kotlin("jvm") version "1.9.0"` → Kotlin JVM 개발을 위한 플러그인
## `group` & `version` 블록
이 블록은 **프로젝트의 그룹 ID와 버전**을 정의한다.
- `group` → 프로젝트를 식별하는 네임스페이스
- `version` → 프로젝트의 버전 정보
```kotlin
group = "com.example"
version = "1.0.0"
```
이 설정을 하면 생성된 JAR 파일의 이름이 `example-1.0.0.jar`처럼 된다.
## `repositories` 블록
의존성을 다운로드할 저장소(Repository)를 정의하는 블록이다.
Gradle은 기본적으로 **Maven Central** 또는 **JCenter**에서 의존성을 가져온다.
### **예제**
```kotlin
repositories {
mavenCentral()
maven {
url = 'https://your.secure.repo/url'
credentials {
username = 'your-username'
password = 'your-password'
}
}
mavenLocal()
flatDir {
dirs("libs")
}
}
```
- `mavenCentral()` → Maven Central 저장소에서 라이브러리를 가져온다.
## `dependencies` 블록
프로젝트에서 사용할 **라이브러리(의존성)**를 추가하는 블록이다.
의존성은 크게 `implementation`, `api`, `testImplementation`으로 나뉜다.
```kotlin
dependencies {
implementation("org.apache.commons:commons-lang3:3.12.0") // 런타임과 컴파일에서 사용
api("com.google.guava:guava:32.0.1-jre") // 외부에서 접근 가능
testImplementation("junit:junit:4.13.2") // 테스트 전용 의존성
}
```
- `implementation` → 내부에서만 사용하는 의존성
- `api` → 외부 프로젝트에서도 접근할 수 있는 API
- `testImplementation` → 테스트 시에만 필요한 의존성
## `application` 블록
`application` 플러그인을 사용하는 경우 **애플리케이션의 메인 클래스**를 지정하는 블록이다.
```kotlin
application {
mainClass.set("com.example.Main")
}
```
이 설정을 하면 `gradle run`을 실행했을 때 `com.example.Main`가 실행된다.
## `tasks` 블록
Gradle에서는 **사용자 정의 태스크**를 만들 수 있다.
```kotlin
tasks.register("hello") {
doLast {
println("Hello, Gradle!")
}
}
```
위 태스크를 실행하려면 다음 명령어를 사용한다.
```sh
gradle hello
```
출력:
```
Hello, Gradle!
```
## `java` 블록 (Java 프로젝트 설정)
Java 프로젝트에서 **컴파일 및 JAR 설정을 추가할 때** 사용한다.
```kotlin
java {
toolchain {
languageVersion.set(JavaLanguageVersion.of(17))
}
}
```
- Java 17을 기본 컴파일러 버전으로 설정한다.
## `jar` 블록 (JAR 파일 설정)
JAR 파일 생성 시 메타데이터를 추가하는 데 사용한다.
### **예제**
```kotlin
tasks.jar {
manifest {
attributes["Main-Class"] = "com.example.Main"
}
}
```
- `Main-Class`를 설정하여 실행 가능한 JAR 파일을 만든다.
## `publishing` 블록 (Maven 배포 설정)
Maven 저장소에 배포할 때 사용한다.
```kotlin
publishing {
publications {
create<MavenPublication>("mavenJava") {
from(components["java"])
}
}
repositories {
maven {
url = uri("https://my.repo.com/releases")
}
}
}
```
- `mavenJava`라는 Maven 아티팩트를 생성하고 지정한 저장소에 업로드할 수 있다.
## `wrapper` 블록 (Gradle Wrapper 설정)
Gradle Wrapper의 버전을 관리할 때 사용한다.
```kotlin
tasks.wrapper {
gradleVersion = "8.12"
distributionType = Wrapper.DistributionType.ALL
}
```
- Gradle 8.12 버전을 사용하도록 설정한다.