Использование Maven
Плагин и версии
Плагин kotlin-maven-plugin компилирует Kotlin-исходники и модули. В настоящее время поддерживается только Maven v3.
Определите используемую версию Kotlin с помощью свойства kotlin.version:
<properties>
<kotlin.version>1.4.10</kotlin.version>
</properties>
Зависимости
Kotlin имеет обширную стандартную библиотеку, которую можно использовать в ваших приложениях. Настройте следующую зависимость в файле pom:
<dependencies>
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-stdlib</artifactId>
<version>${kotlin.version}</version>
</dependency>
</dependencies>
Если вы используете JDK 7 или JDK 8, вы можете использовать расширенные версии Kotlin стандартной библиотеки, которые содержат дополнительные расширяющие функции для API, добавленных в новые версии JDK. Вместо kotlin-stdlib, используйте kotlin-stdlib-jdk7 или kotlin-stdlib-jdk8, в зависимости от версии вашего JDK (для Kotlin 1.1.x используйте kotlin-stdlib-jre7 и kotlin-stdlib-jre8, так как jdk эквиваленты были введены в 1.2.0).
Если ваш проект использует Kotlin рефлексию или средства тестирования, вам также необходимо добавить соответствующие зависимости. Идентификаторы артефактов — kotlin-reflect для библиотеки рефлексии и kotlin-test и kotlin-test-junit для библиотек тестирования.
Компиляция только Kotlin-исходного кода
Для компиляции исходного кода укажите каталоги исходников в теге
<build>
<sourceDirectory>${project.basedir}/src/main/kotlin</sourceDirectory>
<testSourceDirectory>${project.basedir}/src/test/kotlin</testSourceDirectory>
</build>
Для компиляции исходников необходима ссылка на Kotlin Maven Plugin:
<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>
Компиляция Kotlin и Java исходников
Для компиляции приложений с смешанным кодом Kotlin-компилятор должен быть вызван перед Java-компилятором. В терминах Maven это означает, что kotlin-maven-plugin должен выполняться до maven-compiler-plugin с использованием следующего метода. Убедитесь, что плагин kotlin предшествует плагину maven-compiler-plugin в вашем файле pom.xml.
<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>
<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>
<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>
<!-- Replacing default-compile as it is treated specially by maven -->
<execution>
<id>default-compile</id>
<phase>none</phase>
</execution>
<!-- Replacing default-testCompile as it is treated specially by maven -->
<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>
<configuration>
<skip>${maven.test.skip}</skip>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
Инкрементная компиляция
Для ускорения сборки вы можете включить инкрементную компиляцию для Maven (поддерживается с Kotlin 1.1.2). Для этого определите свойство kotlin.compiler.incremental:
<properties>
<kotlin.compiler.incremental>true</kotlin.compiler.incremental>
</properties>
В качестве альтернативы, запустите сборку с опцией -Dkotlin.compiler.incremental=true.
Обработка аннотаций
См. описание инструмента обработки аннотаций Kotlin (kapt).
Поддержка сопроцедур
Сопроцедуры являются экспериментальной функцией в Kotlin 1.2, поэтому Kotlin-компилятор выдает предупреждение при использовании сопроцедур в вашем проекте. Чтобы отключить предупреждение, добавьте следующий блок в ваш файл pom.xml:
<configuration>
<experimentalCoroutines>enable</experimentalCoroutines>
</configuration>
Файл Jar
Для создания небольшого файла Jar, содержащего только код из вашего модуля, включите следующее в build->plugins в вашем файле Maven pom.xml, где main.class определен как свойство и указывает на основной Kotlin или Java класс:
<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, содержащего код из вашего модуля вместе с зависимостями, включите следующее в build->plugins в вашем файле Maven pom.xml, где main.class определен как свойство и указывает на основной Kotlin или Java класс:
<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> узла плагина Maven:
<plugin>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-maven-plugin</artifactId>
<version>${kotlin.version}</version>
<executions>...</executions>
<configuration>
<nowarn>true</nowarn> <!-- Disable warnings -->
<args>
<arg>-Xjsr305=strict</arg> <!-- Enable strict mode for JSR-305 annotations -->
...
</args>
</configuration>
</plugin>
Многие параметры также можно настроить через свойства:
<project ...>
<properties>
<kotlin.compiler.languageVersion>1.0</kotlin.compiler.languageVersion>
</properties>
</project>
Поддерживаются следующие атрибуты:
Атрибуты, общие для JVM и JS
| Имя | Имя свойства | Описание | Возможные значения | Значение по умолчанию |
|---|---|---|---|---|
nowarn | Не генерировать предупреждений | true, false | false | |
languageVersion | kotlin.compiler.languageVersion | Обеспечить совместимость с источником указанной версии Kotlin | "1.2 (УСТАРЕЛО)", "1.3", "1.4", "1.5 (ЭКСПЕРИМЕНТАЛЬНО)" | |
apiVersion | kotlin.compiler.apiVersion | Разрешить использование объявлений только из указанной версии связанных библиотек | "1.2 (УСТАРЕЛО)", "1.3", "1.4", "1.5 (ЭКСПЕРИМЕНТАЛЬНО)" | |
sourceDirs | Каталоги, содержащие исходные файлы для компиляции | Корни исходников проекта | ||
compilerPlugins | Включенные плагины компилятора | [] | ||
pluginOptions | Параметры для плагинов компилятора | [] | ||
args | Дополнительные аргументы компилятора | [] |
Атрибуты, специфичные для JVM
| Имя | Имя свойства | Описание | Возможные значения | Значение по умолчанию |
|---|---|---|---|---|
jvmTarget | kotlin.compiler.jvmTarget | Целевая версия сгенерированного JVM байткода | "1.6", "1.8", "9", "10", "11", "12", "13", "14" | "1.6" |
jdkHome | kotlin.compiler.jdkHome | Включить пользовательский JDK из указанного расположения в classpath вместо стандартного JAVA_HOME |
Атрибуты, специфичные для JS
| Имя | Имя свойства | Описание | Возможные значения | Значение по умолчанию |
|---|---|---|---|---|
outputFile | Целевой *.js файл для результата компиляции | |||
metaInfo | Сгенерировать файлы .meta.js и .kjsm с метаданными. Используется для создания библиотеки | true, false | true | |
sourceMap | Генерировать карту исходных данных | true, false | false | |
sourceMapEmbedSources | Встраивать исходные файлы в карту исходных данных | "never", "always", "inlining" | "inlining" | |
sourceMapPrefix | Добавить указанный префикс к путям в карте исходных данных | |||
moduleKind | Вид JS-модуля, генерируемого компилятором | "umd", "commonjs", "amd", "plain" | "umd" |
Генерация документации
Стандартный плагин генерации JavaDoc (maven-javadoc-plugin) не поддерживает Kotlin-код. Для генерации документации для Kotlin-проектов используйте Dokka; обратитесь к руководству Dokka для инструкций по настройке. Dokka поддерживает проекты с несколькими языками и может генерировать вывод в нескольких форматах, включая стандартный JavaDoc.
OSGi
Для поддержки OSGi см. страницу Kotlin OSGi.
Примеры
Пример проекта Maven можно скачать напрямую из репозитория GitHub
© 2010–2020 JetBrains s.r.o. and Kotlin Programming Language contributors
Licensed under the Apache License, Version 2.0.
https://kotlinlang.org/docs/reference/using-maven.html