Spec-Zone.ru › Kotlin 1.4

Использование 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API