Spec-Zone.ru › Kotlin 1.9

Maven

Плагин и версии

Плагин kotlin-maven-plugin компилирует Kotlin-источники и модули. В настоящее время поддерживается только Maven v3.

Определите используемую версию Kotlin через свойство kotlin.version:

<properties>
    <kotlin.version>1.9.0</kotlin.version>
</properties>

Зависимости

Kotlin имеет обширную стандартную библиотеку, которую можно использовать в ваших приложениях. Для использования стандартной библиотеки в проекте добавьте следующую зависимость в файл pom:

<dependencies>
    <dependency>
        <groupId>org.jetbrains.kotlin</groupId>
        <artifactId>kotlin-stdlib</artifactId>
        <version>${kotlin.version}</version>
    </dependency>
</dependencies>

Если вы нацелены на JDK 7 или 8 с версиями Kotlin старше:

  • 1.8, используйте kotlin-stdlib-jdk7 или kotlin-stdlib-jdk8, соответственно.

  • 1.2, используйте kotlin-stdlib-jre7 или kotlin-stdlib-jre8, соответственно.

Если ваш проект использует отражение Kotlin или средства тестирования, вам также необходимо добавить соответствующие зависимости. Идентификаторы артефактов — kotlin-reflect для библиотеки отражения и kotlin-test и kotlin-test-junit для библиотек тестирования.

Компиляция Kotlin-только исходного кода

Для компиляции исходного кода укажите каталоги источников в теге <build>:

<build>
    <sourceDirectory>${project.basedir}/src/main/kotlin</sourceDirectory>
    <testSourceDirectory>${project.basedir}/src/test/kotlin</testSourceDirectory>
</build>

Для компиляции источников необходима ссылка на плагин Kotlin Maven:

<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 1.8.20, вы можете заменить весь элемент <executions> выше на <extensions>true</extensions>. Включение расширений автоматически добавляет выполнение compile, test-compile, kapt, и test-kapt в ваш сбор, привязанных к соответствующим фазам жизненного цикла. Если вам нужно настроить выполнение, необходимо указать его идентификатор. Пример этого вы найдёте в следующем разделе.

Если несколько плагинов сборки перезаписывают стандартный жизненный цикл, и вы также включили опцию extensions, приоритет в отношении настроек жизненного цикла имеет последний плагин в разделе <build>. Все предыдущие изменения настроек жизненного цикла игнорируются.

Компиляция Kotlin и Java источников

Для компиляции проектов, содержащих 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>
            <extensions>true</extensions> <!-- You can set this option 
            to automatically take information about lifecycles -->
            <executions>
                <execution>
                    <id>compile</id>
                    <goals>
                        <goal>compile</goal> <!-- You can skip the <goals> element 
                        if you enable extensions for the plugin -->
                    </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> <!-- You can skip the <goals> element 
                    if you enable extensions for the plugin -->
                    <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>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

Инкрементальная компиляция

Чтобы ускорить сборку, можно включить инкрементальную компиляцию для Maven, определив свойство kotlin.compiler.incremental:

<properties>
    <kotlin.compiler.incremental>true</kotlin.compiler.incremental>
</properties>

В качестве альтернативы, запустите сборку с опцией -Dkotlin.compiler.incremental=true.

Обработка аннотаций

См. описание инструмента обработки аннотаций Kotlin (kapt).

Файл 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>
    <extensions>true</extensions> <!-- If you want to enable automatic addition of executions to your build -->
    <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.9</kotlin.compiler.languageVersion>
    </properties>
</project>

Поддерживаются следующие атрибуты:

Атрибуты, общие для JVM и JS

Имя

Имя свойства

Описание

Возможные значения

Значение по умолчанию

nowarn

Не генерировать предупреждения

true, false

false

languageVersion

kotlin.compiler.languageVersion

Обеспечить совместимость с указанной версией Kotlin

"1.3" (УСТАРЕЛО), "1.4" (УСТАРЕЛО), "1.5", "1.6", "1.7", "1.8", "1.9" (ЭКСПЕРИМЕНТАЛЬНО)

apiVersion

kotlin.compiler.apiVersion

Разрешить использование только объявлений из указанной версии связанных библиотек

"1.3" (УСТАРЕЛО), "1.4" (УСТАРЕЛО), "1.5", "1.6", "1.7", "1.8", "1.9" (ЭКСПЕРИМЕНТАЛЬНО)

sourceDirs

Директории, содержащие исходные файлы для компиляции

Корни проекта

compilerPlugins

Включенные плагины компилятора

[]

pluginOptions

Параметры для плагинов компилятора

[]

args

Дополнительные аргументы компилятора

[]

Атрибуты, специфичные для JVM

Имя

Имя свойства

Описание

Возможные значения

Значение по умолчанию

jvmTarget

kotlin.compiler.jvmTarget

Целевая версия сгенерированного JVM байткода

"1.8", "9", "10", ..., "20"

"1.8"

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"

Использование BOM

Для использования Kotlin пакета BOM, укажите зависимость от kotlin-bom:

<dependencyManagement>
  <dependencies>  
    <dependency>
      <groupId>org.jetbrains.kotlin</groupId>
      <artifactId>kotlin-bom</artifactId>
      <version>1.9.0</version>
      <type>pom</type>
      <scope>import</scope>
    </dependency>
  </dependencies>
</dependencyManagement>
END_OF_DOCUMENT_MARKER ```

Генерация документации

Стандартный плагин генерации Javadoc (maven-javadoc-plugin) не поддерживает Kotlin-код. Для генерации документации для проектов Kotlin используйте Dokka; см. README Dokka для инструкций по настройке. Dokka поддерживает проекты с несколькими языками и может генерировать выходные данные в различных форматах, включая стандартный Javadoc.

OSGi

Для поддержки OSGi см. страницу Kotlin OSGi.

Последнее изменение: 06 июля 2023
Поддержка вариантов плагинов Gradle Ant

© 2010–2023 JetBrains s.r.o. and Kotlin Programming Language contributors
Licensed under the Apache License, Version 2.0.
https://kotlinlang.org/docs/maven.html

Spec-Zone.ru

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