type | layout | title | description | url |
---|---|---|---|---|
doc |
reference |
Maven |
В этом руководстве рассказывается о различных сценариях при использовании Maven для создания приложений, содержащих код Kotlin |
kotlin-maven-plugin компилирует исходные коды и модули на языке Kotlin. В настоящее время поддерживается только Maven версии 3.
Для определения используемой версии Kotlin используйте свойство kotlin.version:
<properties>
<kotlin.version>{{ site.data.releases.latest.version }}</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
).
Если ваш проект использует Kotlin reflection или объекты для тестирования, то вам нужно добавить соответствующие зависимости.
Artifact ID для Kotlin reflection - 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>
<artifactId>kotlin-maven-plugin</artifactId>
<groupId>org.jetbrains.kotlin</groupId>
<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 plugin до maven-compiler-plugin
в файле pom.xml:
<build>
<plugins>
<plugin>
<artifactId>kotlin-maven-plugin</artifactId>
<groupId>org.jetbrains.kotlin</groupId>
<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>
<!-- Замена компиляции по умолчанию -->
<execution>
<id>default-compile</id>
<phase>none</phase>
</execution>
<!-- Замена 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>
Чтобы ускорить сборку, вы можете использовать инкрементальную компиляцию сборщика Maven (поддерживается начиная с Kotlin 1.1.2).
Для этого добавите свойство kotlin.compiler.incremental
:
<properties>
<kotlin.compiler.incremental>true</kotlin.compiler.incremental>
</properties>
В качестве альтернативы, вы можете запустить сборку с опцией -Dkotlin.compiler.incremental=true
.
См. Описание Инструмент обработки аннотации Kotlin.
Сопрограммы экспериментально поддерживаются в Kotlin 1.2, поэтому компилятор Kotlin выдает предупреждения, когда находит использование корутинов в вашем проекте.
Чтобы отключить предупреждения, добавьте следующий тег в ваш файл pom.xml
:
<configuration>
<experimentalCoroutines>enable</experimentalCoroutines>
</configuration>
Для создания небольшого Jar файла, содержащего код вашего модуля, необходимо включить в раздел build->plugins
файла pom.xml следующий код,
где свойство mainClass указывает на основной класс 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 файла, содержащего код вашего модуля вместе с его зависимостями, необходимо включить в раздел build->plugins
файла pom.xml следующий код,
где свойство mainClass указывает на основной класс 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
Для компиляции JavaScript кода, вам необходимо использовать команды js
и test-js
для выполнения задачи compile
:
<plugin>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-maven-plugin</artifactId>
<version>${kotlin.version}</version>
<executions>
<execution>
<id>compile</id>
<phase>compile</phase>
<goals>
<goal>js</goal>
</goals>
</execution>
<execution>
<id>test-compile</id>
<phase>test-compile</phase>
<goals>
<goal>test-js</goal>
</goals>
</execution>
</executions>
</plugin>
Также необходимо изменить используемую стандартную библиотеку:
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-stdlib-js</artifactId>
<version>${kotlin.version}</version>
Для поддержки модульного тестирования, вам необходимо добавить зависимость kotlin-test-js
.
Для получения более подробной информации просмотрите урок Getting Started with Kotlin and JavaScript with Maven
Дополнительные параметры и аргументы для компилятора могут быть указаны в теге <configuration>
в разделе <plugin>
:
<plugin>
<artifactId>kotlin-maven-plugin</artifactId>
<groupId>org.jetbrains.kotlin</groupId>
<version>${kotlin.version}</version>
<executions>...</executions>
<configuration>
<nowarn>true</nowarn> <!-- Отключение предупреждений -->
<args>
<arg>-Xjsr305=strict</arg> <!-- Включение строго режима для аннотаций JSR-305-->
...
</args>
</configuration>
</plugin>
Многие параметры могут быть настроены через свойства:
<project ...>
<properties>
<kotlin.compiler.languageVersion>1.0</kotlin.compiler.languageVersion>
</properties>
</project>
В настоящий момент поддерживаются следующие атрибуты:
Имя | Название свойства | Описание | Доступные значения | Значение по умолчанию |
---|---|---|---|---|
nowarn | Генерация без предупреждений | true, false | false | |
languageVersion | kotlin.compiler.languageVersion | Обеспечить совместимость исходного кода с указанной языковой версией | "1.0", "1.1" | "1.1" |
apiVersion | kotlin.compiler.apiVersion | Разрешить использование объявлений только из указанной версии связанных библиотек | "1.0", "1.1" | "1.1" |
sourceDirs | Директории с исходными файлами для компиляции | Каталоги с исходным кодом проекта | ||
compilerPlugins | Включить плагины компилятора | [] | ||
pluginOptions | Параметры плагина компиляции | [] | ||
args | Дополнительные аргументы компилятора | [] |
Имя | Название свойства | Описание | Доступные значения | Значение по умолчанию |
---|---|---|---|---|
jvmTarget | kotlin.compiler.jvmTarget | Версия генерируемого для JVM байт-кода | "1.6", "1.8" | "1.6" |
jdkHome | kotlin.compiler.jdkHome | Путь к домашнему каталогу JDK для включения в путь к классам, если отличается от стандартного JAVA_HOME |
Имя | Название свойства | Описание | Доступные значения | Значение по умолчанию |
---|---|---|---|---|
outputFile | Путь выходных файлов | |||
metaInfo | Создать .meta.js и .kjsm файлы с метаданными. Использование для создания библиотеки | true, false | true | |
sourceMap | Создание source map | true, false | false | |
sourceMapEmbedSources | Включить исходные файлы в source map | "never", "always", "inlining" | "inlining" | |
sourceMapPrefix | Префикс для путей в source map | |||
moduleKind | Вид используемой генерации модулей | "plain", "amd", "commonjs", "umd" | "plain" |
Плагин (maven-javadoc-plugin
) для генерации документации согласно стандарту JavaDoc не поддерживает Kotlin.
Для создания документации в проектах на Kotlin используйте Dokka;
обращайтесь к Dokka README
для получения инструкций по настройке. Dokka поддерживает проекты, состоящие из различных языков,
и может создавать документацию в различных форматах, включая стандарт JavaDoc.
Для поддержки OSGi смотрите Kotlin OSGi.
Пример проекта Maven может быть загружен из репозитория на GitHub