Maven 프로젝트에서 리포지토리와 의존성 설정하기
Maven 프로젝트에서 리포지토리와 의존성 설정하기
Kotlin Maven 프로젝트에서는 Maven이 기본 Maven Central 리포지토리 너머에서 아티팩트를 찾는 위치를 구성하고, 프로젝트가 의존하는 라이브러리를 정의할 수 있어요.
본문
리포지토리 선언하기
기본적으로 모든 Maven 프로젝트에는 mavenCentral 리포지토리가 사용 가능해요. 다른 리포지토리의 아티팩트에 접근하려면 <repositories> 섹션에서 리포지토리 이름의 사용자 지정 ID와 그 URL을 지정해요:
<repositories>
<repository>
<id>spring-repo</id>
<url>https://repo.spring.io/release</url>
</repository>
</repositories>
Gradle 프로젝트에서 리포지토리로 mavenLocal()을 선언하면 Gradle과 Maven 프로젝트를 오갈 때 문제가 생길 수 있어요. 자세한 내용은 리포지토리 선언을 참조해요.
일반적으로 라이브러리에 대한 의존성을 추가하려면 <dependencies> 섹션에 새 <dependency> 항목을 선언해요:
<dependencies>
<dependency>
<groupId>org.jetbrains.kotlinx</groupId>
<artifactId>kotlinx-serialization-json</artifactId>
<version>1.11.0</version>
</dependency>
</dependencies>
의존성 설정하기
표준 라이브러리에 대한 의존성
Kotlin에는 애플리케이션에서 사용할 수 있는 광범위한 표준 라이브러리가 있어요. 표준 라이브러리 의존성을 수동으로 추가하거나, 없을 때 자동으로 설정해 주는 <extensions> 옵션을 활성화할 수 있어요.
자동 설정
Kotlin Maven 플러그인이 제공하는 <extensions> 옵션을 사용하면 수동 구성을 피할 수 있어요. 이 옵션은 프로젝트에 kotlin-stdlib 의존성이 정의되어 있지 않으면 자동으로 추가해요. 예를 들어 새 Kotlin Maven 프로젝트를 만들거나 기존 Java Maven 프로젝트에 Kotlin을 도입할 때 그렇죠.
이미 다른 버전으로 kotlin-stdlib 의존성을 선언했다면, <extensions>가 있는 Kotlin Maven 플러그인은 그것을 덮어쓰지 않아요.
표준 라이브러리의 자동 추가를 선택 해제(opt out)할 수도 있어요. 그러려면 <properties> 섹션에 다음을 추가해요:
<project>
<properties>
<kotlin.smart.defaults.enabled>false</kotlin.smart.defaults.enabled>
</properties>
</project>
이 프로퍼티는 표준 라이브러리의 자동 추가뿐 아니라 소스 루트 경로의 등록도 비활성화해요. 다른 <extensions> 기능에는 영향이 없어요.
수동 구성
Kotlin 표준 라이브러리를 프로젝트에 수동으로 추가하려면 pom.xml 파일의 dependencies 섹션을 다음 내용으로 업데이트해요:
<dependencies>
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-stdlib</artifactId>
<!-- Uses kotlin.version specified in <properties/>: -->
<version>${kotlin.version}</version>
</dependency>
</dependencies>
다음보다 오래된 Kotlin 버전으로 JDK 7 또는 8을 대상으로 한다면:
- 1.8보다 오래된 경우, 각각
kotlin-stdlib-jdk7또는kotlin-stdlib-jdk8을 사용해요. - 1.2보다 오래된 경우, 각각
kotlin-stdlib-jre7또는kotlin-stdlib-jre8을 사용해요.
테스트 라이브러리에 대한 의존성
프로젝트가 Kotlin reflection이나 테스트 프레임워크를 사용한다면 관련 의존성을 추가해요. reflection 라이브러리에는 kotlin-reflect를, 테스트 라이브러리에는 kotlin-test와 kotlin-test-junit5를 사용해요:
<dependencies>
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-reflect</artifactId>
<version>${kotlin.version}</version>
</dependency>
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-test-junit5</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
kotlinx 라이브러리에 대한 의존성
kotlinx 라이브러리의 경우 기본 아티팩트 이름을 추가하거나 -jvm 접미사를 붙인 이름을 추가할 수 있어요. 라이브러리의 README 파일을 klibs.io에서 참조해요.
예를 들어 kotlinx.coroutines 라이브러리에 대한 의존성을 추가하려면:
<dependencies>
<dependency>
<groupId>org.jetbrains.kotlinx</groupId>
<artifactId>kotlinx-coroutines-core</artifactId>
<version>1.11.0</version>
</dependency>
</dependencies>
kotlinx-datetime 라이브러리에 대한 의존성을 추가하려면:
<dependencies>
<dependency>
<groupId>org.jetbrains.kotlinx</groupId>
<artifactId>kotlinx-datetime-jvm</artifactId>
<version>0.8.0</version>
</dependency>
</dependencies>
BOM으로 의존성 관리하기
Bill of Materials(BOM)은 프로젝트에서 의존성 버전을 관리하는 특별한 POM 파일이에요. 이렇게 하면 관련 아티팩트들을 일관되게 유지하고 버전 충돌을 피할 수 있어요.
Kotlin은 같은 Kotlin 릴리스에 대응하는 kotlin-stdlib, kotlin-reflect, kotlin-test 같은 Kotlin 라이브러리들의 버전을 지정하는 kotlin-bom 아티팩트를 배포해요. 프로젝트의 다른 라이브러리가 Kotlin 아티팩트에 전이 의존성을 가질 때 유용한데, 모든 의존성이 같은 Kotlin 버전으로 해석되도록 보장해 주기 때문이에요.
Kotlin BOM을 사용하려면 pom.xml 파일의 <dependencyManagement> 섹션에서 다음과 같이 import해요:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-bom</artifactId>
<version>2.4.20</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
BOM을 import한 후에는 <dependencies> 섹션에서 Kotlin 의존성의 버전을 지정하지 않고 선언할 수 있어요. 버전은 BOM 파일에서 자동으로 가져와요.
- BOM을 import한다고 해서 그 자체로 프로젝트에 의존성이 추가되지는 않아요. 그것은 명시적으로 선언된 의존성과 전이 의존성의 버전만 제어해요.
- 의존성에 여전히
<version>을 지정한다면, 그 값이 BOM의 버전을 덮어써요.
프로젝트가 함께 릴리스되는 여러 라이브러리를 배포한다면, 사용자들이 그 라이브러리들의 버전을 같은 방식으로 맞출 수 있도록 직접 BOM을 제공할 수도 있어요. 직접 BOM을 만드는 방법을 배우려면 Maven 문서를 참조해요.
더 알아보기
다음 단계로 Kotlin 컴파일러 설정을 살펴보세요. 상위 문서인 Maven도 참고하세요.