메이븐
메이븐은 모든 자바 기반 프로젝트를 빌드하고 관리하는 데 사용할 수 있는 빌드 시스템입니다.
플러그인 구성 및 활성화
kotlin-maven-plugin
은 코틀린 소스와 모듈을 컴파일합니다. 현재는 Maven v3만 지원됩니다.
pom.xml
파일에서 사용할 코틀린 버전을 kotlin.version
프로퍼티에 정의합니다:
<properties>
<kotlin.version>2.2.10</kotlin.version>
</properties>
kotlin-maven-plugin
을 활성화하려면 pom.xml
파일을 업데이트합니다:
<plugins>
<plugin>
<artifactId>kotlin-maven-plugin</artifactId>
<groupId>org.jetbrains.kotlin</groupId>
<version>2.2.10</version>
</plugin>
</plugins>
JDK 17 사용
JDK 17을 사용하려면 .mvn/jvm.config
파일에 다음을 추가합니다:
--add-opens=java.base/java.lang=ALL-UNNAMED
--add-opens=java.base/java.io=ALL-UNNAMED
저장소 선언
기본적으로 mavenCentral
저장소는 모든 메이븐 프로젝트에서 사용할 수 있습니다. 다른 저장소의 아티팩트에 접근하려면, <repositories>
엘리먼트에 각 저장소의 ID와 URL을 지정합니다:
<repositories>
<repository>
<id>spring-repo</id>
<url>https://repo.spring.io/release</url>
</repository>
</repositories>
Gradle 프로젝트에서
mavenLocal()
을 저장소로 선언하면 Gradle과 Maven 프로젝트 간에 전환할 때 문제가 발생할 수 있습니다. 자세한 내용은 저장소 선언을 참조하세요.
의존성 설정
코틀린은 애플리케이션에서 사용할 수 있는 광범위한 표준 라이브러리를 가지고 있습니다. 프로젝트에서 표준 라이브러리를 사용하려면 다음 의존성을 pom.xml
파일에 추가합니다:
<dependencies>
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-stdlib</artifactId>
<version>${kotlin.version}</version>
</dependency>
</dependencies>
다음과 같은 이전 버전의 코틀린으로 JDK 7 또는 8을 대상으로 하는 경우:
- 1.8 미만 버전에서는 각각
kotlin-stdlib-jdk7
또는kotlin-stdlib-jdk8
을 사용하세요.- 1.2 미만 버전에서는 각각
kotlin-stdlib-jre7
또는kotlin-stdlib-jre8
을 사용하세요.
프로젝트에서 코틀린 리플렉션 또는 테스트 기능을 사용하는 경우, 해당 의존성도 추가해야 합니다. 아티팩트 ID는 리플렉션 라이브러리의 경우 kotlin-reflect
이고, 테스트 라이브러리의 경우 kotlin-test
및 kotlin-test-junit
입니다.
코틀린 전용 소스 코드 컴파일
소스 코드를 컴파일하려면 <build>
태그에 소스 디렉터리를 지정합니다:
<build>
<sourceDirectory>${project.basedir}/src/main/kotlin</sourceDirectory>
<testSourceDirectory>${project.basedir}/src/test/kotlin</testSourceDirectory>
</build>
소스를 컴파일하려면 코틀린 메이븐 플러그인을 참조해야 합니다:
<build>
<plugins>
<plugin>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-maven-plugin</artifactId>
<version>${kotlin.version}</version>
<executions>
<execution>
<id>compile</id>
<goals>
<goal>compile</goal>
</goals>
</execution>
<execution>
<id>test-compile</id>
<goals>
<goal>test-compile</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
코틀린 1.8.20부터 위 <executions>
엘리먼트 전체를 <extensions>true</extensions>
로 대체할 수 있습니다. 확장을 활성화하면 compile
, test-compile
, kapt
, test-kapt
실행이 빌드에 자동으로 추가되어 해당 라이프사이클 단계에 바인딩됩니다. 실행을 구성해야 하는 경우 ID를 지정해야 합니다. 다음 섹션에서 이 예시를 찾을 수 있습니다.
여러 빌드 플러그인이 기본 라이프사이클을 덮어쓰고
extensions
옵션을 활성화한 경우,<build>
섹션의 마지막 플러그인이 라이프사이클 설정에 우선권을 가집니다. 이전 라이프사이클 설정에 대한 모든 변경사항은 무시됩니다.
코틀린 및 자바 소스 컴파일
코틀린 및 자바 소스 코드가 포함된 프로젝트를 컴파일하려면 자바 컴파일러 이전에 코틀린 컴파일러를 호출합니다. 메이븐 용어로는 pom.xml
파일에서 kotlin
플러그인이 maven-compiler-plugin
보다 먼저 오도록 하여, kotlin-maven-plugin
이 maven-compiler-plugin
보다 먼저 실행되어야 함을 의미합니다:
<build>
<plugins>
<plugin>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-maven-plugin</artifactId>
<version>${kotlin.version}</version>
<extensions>true</extensions> <!-- 라이프사이클 정보를 자동으로 가져오도록 이 옵션을 설정할 수 있습니다 -->
<executions>
<execution>
<id>compile</id>
<goals>
<goal>compile</goal> <!-- 플러그인에 대한 확장을 활성화하는 경우 <goals> 엘리먼트를 생략할 수 있습니다 -->
</goals>
<configuration>
<sourceDirs>
<sourceDir>${project.basedir}/src/main/kotlin</sourceDir>
<sourceDir>${project.basedir}/src/main/java</sourceDir>
</sourceDirs>
</configuration>
</execution>
<execution>
<id>test-compile</id>
<goals>
<goal>test-compile</goal> <!-- 플러그인에 대한 확장을 활성화하는 경우 <goals> 엘리먼트를 생략할 수 있습니다 -->
</goals>
<configuration>
<sourceDirs>
<sourceDir>${project.basedir}/src/test/kotlin</sourceDir>
<sourceDir>${project.basedir}/src/test/java</sourceDir>
</sourceDirs>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.5.1</version>
<executions>
<!-- Maven에서 특별히 처리되므로 default-compile을 대체합니다 -->
<execution>
<id>default-compile</id>
<phase>none</phase>
</execution>
<!-- Maven에서 특별히 처리되므로 default-testCompile을 대체합니다 -->
<execution>
<id>default-testCompile</id>
<phase>none</phase>
</execution>
<execution>
<id>java-compile</id>
<phase>compile</phase>
<goals>
<goal>compile</goal>
</goals>
</execution>
<execution>
<id>java-test-compile</id>
<phase>test-compile</phase>
<goals>
<goal>testCompile</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
증분 컴파일 활성화
빌드를 더 빠르게 만들려면 kotlin.compiler.incremental
프로퍼티를 추가하여 증분 컴파일을 활성화할 수 있습니다:
<properties>
<kotlin.compiler.incremental>true</kotlin.compiler.incremental>
</properties>
또는 -Dkotlin.compiler.incremental=true
옵션으로 빌드를 실행합니다.
어노테이션 처리 구성
kapt
– Maven에서 사용하기를 참조하세요.
JAR 파일 생성
모듈의 코드만 포함하는 작은 JAR 파일을 생성하려면 pom.xml
파일의 build->plugins
아래에 다음을 포함합니다. 여기서 main.class
는 프로퍼티로 정의되며 메인 코틀린 또는 자바 클래스를 가리킵니다:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.6</version>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<mainClass>${main.class}</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
독립 실행형 JAR 파일 생성
모듈의 코드와 의존성을 모두 포함하는 독립 실행형 JAR 파일을 생성하려면 pom.xml
파일의 build->plugins
아래에 다음을 포함합니다. 여기서 main.class
는 프로퍼티로 정의되며 메인 코틀린 또는 자바 클래스를 가리킵니다:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.6</version>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals> <goal>single</goal> </goals>
<configuration>
<archive>
<manifest>
<mainClass>${main.class}</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</execution>
</executions>
</plugin>
이 독립 실행형 JAR 파일은 애플리케이션을 실행하기 위해 JRE에 직접 전달할 수 있습니다:
java -jar target/mymodule-0.0.1-SNAPSHOT-jar-with-dependencies.jar
컴파일러 옵션 지정
컴파일러를 위한 추가 옵션과 인자는 메이븐 플러그인 노드의 <configuration>
엘리먼트 아래에 태그로 지정할 수 있습니다:
<plugin>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-maven-plugin</artifactId>
<version>${kotlin.version}</version>
<extensions>true</extensions> <!-- 빌드에 실행을 자동으로 추가하려면 이 옵션을 활성화합니다 -->
<executions>...</executions>
<configuration>
<nowarn>true</nowarn> <!-- 경고 비활성화 -->
<args>
<arg>-Xjsr305=strict</arg> <!-- JSR-305 어노테이션에 대한 strict 모드 활성화 -->
...
</args>
</configuration>
</plugin>
많은 옵션은 프로퍼티를 통해서도 구성할 수 있습니다:
<project ...>
<properties>
<kotlin.compiler.languageVersion>2.1</kotlin.compiler.languageVersion>
</properties>
</project>
다음 속성이 지원됩니다:
JVM 관련 속성
이름 | 프로퍼티 이름 | 설명 | 가능한 값 | 기본값 |
---|---|---|---|---|
nowarn | 경고 생성 안 함 | true, false | false | |
languageVersion | kotlin.compiler.languageVersion | 지정된 코틀린 버전과의 소스 호환성 제공 | "1.8", "1.9", "2.0", "2.1", "2.2" (EXPERIMENTAL) | |
apiVersion | kotlin.compiler.apiVersion | 번들된 라이브러리의 지정된 버전에서만 선언 사용 허용 | "1.8", "1.9", "2.0", "2.1", "2.2" (EXPERIMENTAL) | |
sourceDirs | 컴파일할 소스 파일을 포함하는 디렉터리 | 프로젝트 소스 루트 | ||
compilerPlugins | 활성화된 컴파일러 플러그인 | [] | ||
pluginOptions | 컴파일러 플러그인 옵션 | [] | ||
args | 추가 컴파일러 인자 | [] | ||
jvmTarget | kotlin.compiler.jvmTarget | 생성된 JVM 바이트코드의 대상 버전 | "1.8", "9", "10", ..., "24" | "1.8" |
jdkHome | kotlin.compiler.jdkHome | 기본 JAVA_HOME 대신 지정된 위치의 사용자 지정 JDK를 클래스패스에 포함 |
BOM 사용
코틀린 자재 명세서(BOM)를 사용하려면 kotlin-bom
에 대한 의존성을 작성합니다:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-bom</artifactId>
<version>2.2.10</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
문서 생성
표준 Javadoc 생성 플러그인(maven-javadoc-plugin
)은 코틀린 코드를 지원하지 않습니다. 코틀린 프로젝트의 문서를 생성하려면 Dokka를 사용하세요. Dokka는 혼합 언어 프로젝트를 지원하며 표준 Javadoc을 포함한 여러 형식으로 출력을 생성할 수 있습니다. 메이븐 프로젝트에서 Dokka를 구성하는 방법에 대한 자세한 내용은 Maven을 참조하세요.