# 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("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 버전을 사용하도록 설정한다.