174 lines
5.2 KiB
Markdown
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 버전을 사용하도록 설정한다.
|