Maven 프로젝트에서 리포지토리와 의존성 설정하기

Maven 프로젝트에서 리포지토리와 의존성 설정하기

Kotlin Maven 프로젝트에서는 Maven이 기본 Maven Central 리포지토리 너머에서 아티팩트를 찾는 위치를 구성하고, 프로젝트가 의존하는 라이브러리를 정의할 수 있어요.

출처: Set repositories and dependencies in a Maven project

본문

리포지토리 선언하기

기본적으로 모든 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-testkotlin-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도 참고하세요.