Spec-Zone.ru › Kotlin 2

Плагин компилятора kapt

Плагин компилятора kapt позволяет использовать существующие процессоры аннотаций Java в Kotlin и работает как с Maven, так и с Gradle. Он создает файлы-заглушки из исходного кода Kotlin, а затем запускает процессоры аннотаций Java для этих заглушек.

Это позволяет использовать обработку аннотаций на основе Java в проектах Kotlin для таких библиотек, как MapStruct и Data Binding.

Система сборки IntelliJ не поддерживает kapt. Чтобы повторно запустить обработку аннотаций в IntelliJ IDEA, запустите сборку из окна инструментов Maven.

Настройка плагина

Вы можете настроить плагин kapt для Gradle, Maven или использовать его из командной строки.

Gradle

Чтобы использовать kapt в Gradle, выполните следующие действия:

  1. Примените плагин Gradle kapt в файле сценария сборки build.gradle(.kts):

    plugins {
        kotlin("kapt") version "2.4.20"
    }
    
    plugins {
        id "org.jetbrains.kotlin.kapt" version "2.4.20"
    }
    
  2. Добавьте соответствующие зависимости с помощью конфигурации kapt в блоке dependencies {}:

    dependencies {
        kapt("groupId:artifactId:version")
    }
    
    dependencies {
        kapt 'groupId:artifactId:version'
    }
    
  3. Если ранее вы использовали поддержку Android для процессоров аннотаций, замените использование конфигурации annotationProcessor на kapt. Если проект содержит классы Java, плагин kapt обрабатывает и их.

    Если вы используете процессоры аннотаций для исходного кода androidTest или test, соответствующие конфигурации kapt называются kaptAndroidTest и kaptTest. Обратите внимание, что kaptAndroidTest и kaptTest расширяют kapt, поэтому можно указать зависимость kapt, и она будет доступна как для исходного кода приложения, так и для тестов.

Maven

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

Автоматическая настройка

Настроить kapt можно проще, включив параметр <extensions> для плагина Kotlin Maven. В этом случае не нужно вручную настраивать раздел <execution> kapt, указывая цели или исходные каталоги.

Чтобы настроить kapt автоматически, установите для параметра <extensions> значение true для kotlin-maven-plugin в файле сборки pom.xml:

<plugin>
    <groupId>org.jetbrains.kotlin</groupId>
    <artifactId>kotlin-maven-plugin</artifactId>
    <version>${kotlin.version}</version>
    <extensions>true</extensions>
    <configuration>
        <annotationProcessorPaths>
            <!-- Specify your annotation processors here -->
            <annotationProcessorPath>
                <groupId>org.mapstruct</groupId>
                <artifactId>mapstruct-processor</artifactId>
                <version>1.6.3</version>
            </annotationProcessorPath>
        </annotationProcessorPaths>
    </configuration>
</plugin>

Дополнительные сведения о параметре <extensions> см. в разделе Автоматическая настройка.

Настройка вручную

Чтобы настроить kapt вручную в проекте Kotlin Maven, добавьте выполнение цели kapt из kotlin-maven-plugin перед выполнением compile:

<execution>
    <id>kapt</id>
    <goals>
        <goal>kapt</goal>
    </goals>
    <configuration>
        <sourceDirs>
            <sourceDir>src/main/kotlin</sourceDir>
            <sourceDir>src/main/java</sourceDir>
        </sourceDirs>
        <annotationProcessorPaths>
            <!-- Specify your annotation processors here -->
            <annotationProcessorPath>
                <groupId>org.mapstruct</groupId>
                <artifactId>mapstruct-processor</artifactId>
                <version>1.6.3</version>
            </annotationProcessorPath>
        </annotationProcessorPaths>
    </configuration>
</execution>

Чтобы настроить режим обработки аннотаций, задайте параметр aptMode в блоке <configuration>. Например:

<configuration>
   ...
   <aptMode>stubs</aptMode>
</configuration>

CLI

kapt доступен как автономный инструмент CLI в бинарном дистрибутиве компилятора Kotlin.

Чтобы запустить kapt из командной строки, используйте:

kapt <options> <source files>

Например:

kapt -Kapt-mode=stubsAndApt \
  -Kapt-sources=build/kapt/sources \
  -Kapt-classes=build/kapt/classes \
  -Kapt-stubs=build/kapt/stubs \
  -Kapt-classpath=lib/ap.jar \
  -Kapt-classpath=lib/anotherAp.jar \
  src/main/kotlin
  • См. полный список параметров компилятора, относящихся к kapt.

  • Также можно передать все допустимые параметры компилятора Kotlin. Выполните kotlinc -help, чтобы просмотреть их.

Настройка процессоров аннотаций

kapt предоставляет параметры для управления обнаружением, организацией и выполнением процессоров аннотаций, включая управление путем к классам процессоров, наследование процессоров из общих конфигураций и сохранение активности процессоров, предназначенных для javac.

Дополнительные параметры настройки, например передача параметров процессорам аннотаций и javac, см. в разделе Настройка процессоров аннотаций.

Настройка пути к классам и обнаружения процессоров

Можно отключить обнаружение процессоров аннотаций, не включенных в путь к классам процессоров kapt. Это исключает ненужные процессоры аннотаций из пути к классам компиляции.

Gradle

Gradle использует избежание компиляции, чтобы пропускать обработку аннотаций при повторной сборке проекта и ускорять инкрементальные сборки с kapt. В частности, обработка аннотаций пропускается, если:

  • Исходные файлы проекта не изменились.

  • Изменения в зависимостях совместимы с ABI. Например, изменились только тела функций.

Однако избежать компиляции нельзя для процессоров аннотаций, обнаруженных в пути к классам компиляции: изменения их внутренней реализации требуют запуска задач обработки аннотаций, даже если ABI процессоров не изменился.

Поэтому мы не рекомендуем использовать процессоры аннотаций из пути к классам компиляции. Чтобы исключить эти процессоры из обработки kapt, добавьте свойство kapt.include.compile.classpath в файл gradle.properties:

# gradle.properties
kapt.include.compile.classpath=false

Если для параметра задано значение false, зависимости процессоров аннотаций, не включенные в путь к классам процессоров (конфигурации kapt*), исключаются из обработки kapt.

Maven

Чтобы исключить процессоры аннотаций, не включенные в путь к классам процессоров kapt, задайте для параметра includeCompileClasspath значение false в разделе <execution> плагина kapt:

<execution>
    <id>kapt</id>
    <goals>
        <goal>kapt</goal>
    </goals>
    <configuration>
        <includeCompileClasspath>false</includeCompileClasspath>
        <sourceDirs>...</sourceDirs>
        <annotationProcessorPaths>...</annotationProcessorPaths>
    </configuration>
</execution>

Кроме того, можно использовать свойство kapt.include.compile.classpath в разделе <properties> файла pom.xml:

<properties>
    <kapt.include.compile.classpath>false</kapt.include.compile.classpath>
</properties>

Если для параметра задано значение false, процессоры аннотаций, не включенные в раздел <annotationProcessorPaths>, исключаются из обработки kapt.

Если параметр includeCompileClasspath не задан и kapt обнаружит процессор аннотаций в пути к классам компиляции, который явно не указан в пути к классам процессоров, появится предупреждение об устаревании:

[WARNING] Annotation processors discovery from compile classpath is deprecated.
Set 'kapt.include.compile.classpath=false' to disable discovery.

Чтобы просмотреть список процессоров аннотаций, не включенных в путь к классам kapt, запустите сборку с параметром уровня журналирования --info.

Наследование процессоров аннотаций из суперкoнфигураций

Можно определить общий набор процессоров аннотаций в отдельной конфигурации Gradle в качестве суперкoнфигурации, а затем расширить ее в конфигурациях kapt для подпроектов.

Например, для подпроекта, использующего MapStruct, добавьте следующую конфигурацию в файл build.gradle(.kts):

val commonAnnotationProcessors by configurations.creating
configurations.named("kapt") { extendsFrom(commonAnnotationProcessors) }

dependencies {
    implementation("org.mapstruct:mapstruct:1.6.3")
    commonAnnotationProcessors("org.mapstruct:mapstruct-processor:1.6.3")
}

В этом примере конфигурация Gradle commonAnnotationProcessors — общая суперкoнфигурация для обработки аннотаций, которую нужно использовать во всех проектах. С помощью метода extendsFrom() конфигурация commonAnnotationProcessors добавляется в качестве суперкoнфигурации. kapt видит, что конфигурация Gradle commonAnnotationProcessors зависит от процессора аннотаций MapStruct. Поэтому kapt включает процессор аннотаций MapStruct в конфигурацию обработки аннотаций.

Сохранение процессоров аннотаций компилятора Java

По умолчанию kapt запускает все процессоры аннотаций и отключает обработку аннотаций в javac. Однако для запуска некоторых процессоров аннотаций, например Lombok, может потребоваться javac.

В файле сборки Gradle используйте параметр keepJavacAnnotationProcessors:

kapt {
    keepJavacAnnotationProcessors = true
}

Если вы используете Maven, настройте плагин явно. См. пример настройки плагина компилятора Lombok.

Оптимизация сборок kapt

kapt предлагает несколько стратегий для Gradle, позволяющих сократить время обработки аннотаций, в том числе параллельное выполнение задач, использование кэша сборки, кэширование загрузчиков классов процессоров и инкрементальную обработку аннотаций.

Дополнительные параметры, влияющие на поведение сборки, например коррекция типов ошибок, удаление метаданных заглушек и сканирование пути к классам компиляции, см. в разделе Параметры поведения.

Параллельный запуск задач kapt

kapt использует Worker API Gradle для выполнения задач обработки аннотаций. Worker API позволяет Gradle параллельно выполнять независимые задачи обработки аннотаций в рамках одного проекта, что в некоторых случаях значительно сокращает время выполнения.

Если в плагине Kotlin Gradle задана пользовательская версия JDK, рабочие процессы задач kapt используют только режим processIsolation().

Если нужно указать дополнительные аргументы JVM для рабочего процесса kapt, используйте входной параметр kaptProcessJvmArgs задачи KaptWithoutKotlincTask:

tasks.withType<org.jetbrains.kotlin.gradle.internal.KaptWithoutKotlincTask>()
    .configureEach {
        kaptProcessJvmArgs.add("-Xmx512m")
    }
tasks.withType(org.jetbrains.kotlin.gradle.internal.KaptWithoutKotlincTask.class)
    .configureEach {
        kaptProcessJvmArgs.add('-Xmx512m')
    }

Безопасное использование кэша сборки Gradle

Gradle по умолчанию кэширует задачи обработки аннотаций kapt. Однако процессоры аннотаций могут выполнять произвольный код. Это может привести к ненужному преобразованию входных данных задачи в выходные или к доступу к файлам, которые Gradle не отслеживает, и их изменению.

Если процессоры аннотаций, используемые при сборке, нельзя корректно кэшировать, кэширование можно отключить, чтобы избежать ложных срабатываний при проверке кэша задач kapt. Для этого используйте свойство useBuildCache в сценарии сборки:

kapt {
    useBuildCache = false
}

Кэширование загрузчиков классов процессоров аннотаций

Кэширование загрузчиков классов процессоров аннотаций помогает ускорить работу kapt, если вы запускаете несколько задач Gradle подряд.

Чтобы включить эту функцию, используйте следующие свойства в файле gradle.properties:

# gradle.properties
#
# Any positive value enables caching
# Use the same value as the number of modules that use kapt
kapt.classloaders.cache.size=5

# Disable for caching to work
kapt.include.compile.classpath=false

Если при кэшировании процессоров аннотаций возникнут проблемы, отключите их кэширование:

# Specify annotation processors' full names to disable caching for them
kapt.classloaders.cache.disableForProcessors=[annotation processors full names]

Если у вас возникнут проблемы с этой функцией, будем признательны за ваш отзыв в YouTrack.

Использование инкрементальной обработки аннотаций

В Gradle kapt по умолчанию поддерживает инкрементальную обработку аннотаций, поэтому повторно обрабатываются только измененные файлы.

В настоящее время инкрементальная обработка аннотаций работает только в том случае, если:

  • Инкрементальная компиляция включена.

  • Все процессоры аннотаций в сборке являются инкрементальными.

Чтобы отключить инкрементальную обработку аннотаций, добавьте эту строку в файл gradle.properties:

kapt.incremental.apt=false

В настоящее время инкрементальная обработка аннотаций для kapt не поддерживается в Maven или CLI.

Анализ производительности

kapt предоставляет встроенные средства диагностики, помогающие оценить производительность обработки аннотаций. Среди них — отчеты о времени выполнения каждого процессора и количестве созданных файлов, позволяющие выявлять неиспользуемые процессоры.

Дополнительные параметры диагностики, например история чтения файлов для отладки инкрементальной обработки и обнаружение утечек памяти, см. в разделе Параметры диагностики и статистики.

Измерение производительности процессоров аннотаций

Чтобы получить статистику производительности выполнения процессоров аннотаций, используйте параметр showProcessorStats. Пример вывода:

Kapt Annotation Processing performance report:
com.example.processor.TestingProcessor: total: 133 ms, init: 36 ms, 2 round(s): 97 ms, 0 ms
com.example.processor.AnotherProcessor: total: 100 ms, init: 6 ms, 1 round(s): 93 ms

Этот отчет можно сохранить в файл с помощью параметра dumpProcessorStats. Например, следующая команда CLI запускает kapt и сохраняет статистику в файл ap-perf-report.file:

kapt -Kapt-mode=stubsAndApt \
  -Kapt-classpath=processor/build/libs/processor.jar \
  -Kapt-dump-processor-stats=ap-perf-report.file \
  sample/src/main/

Отслеживание количества созданных файлов

Плагин kapt может выводить статистику о количестве файлов, созданных каждым процессором аннотаций.

Это помогает определить, включены ли в сборку неиспользуемые процессоры аннотаций. По созданному отчету можно найти модули, запускающие ненужные процессоры аннотаций, и обновить их, чтобы избежать этого.

Чтобы включить вывод статистики:

  1. В файле сборки Gradle задайте для параметра showProcessorStats значение true:

    // build.gradle(.kts)
    kapt {
        showProcessorStats = true
    }
    
  2. В файле gradle.properties задайте для параметра компилятора verbose значение true:

    # gradle.properties
    kapt.verbose=true
    

Статистика отображается в журналах с уровнем info. Сначала выводится строка Annotation processor stats:, за которой следует статистика времени выполнения каждого процессора аннотаций. Затем выводится строка Generated files report:, за которой следует статистика количества файлов, созданных каждым процессором аннотаций. Например:

[INFO] Annotation processor stats:
[INFO] org.mapstruct.ap.MappingProcessor: total: 290 ms, init: 1 ms, 3 round(s): 289 ms, 0 ms, 0 ms
[INFO] Generated files report:
[INFO] org.mapstruct.ap.MappingProcessor: total sources: 2, sources per round: 2, 0, 0

В настоящее время отслеживание количества созданных файлов с помощью параметров компилятора showProcessorStats и verbose не поддерживается в Maven или CLI.

Создание исходного кода Kotlin

kapt может создавать исходный код Kotlin. Для этого записывайте созданные файлы исходного кода Kotlin в указанный каталог с помощью processingEnv.options["kapt.kotlin.generated"]. Затем файлы исходного кода Kotlin компилируются вместе с основными исходными файлами.

kapt не поддерживает несколько раундов обработки аннотаций для созданных файлов Kotlin.

Параметры компилятора

Настройка процессора аннотаций

Параметр

Описание

Настройка

aptMode

Управляет выполнением этапов рабочего процесса kapt:

  • stubsAndApt генерирует заглушки и запускает обработку аннотаций (по умолчанию)

  • stubs только генерирует заглушки Java из Kotlin

  • apt только запускает процессоры аннотаций (предполагается, что заглушки уже существуют)

Gradle: напрямую недоступно; Gradle запускает генерацию заглушек и apt как отдельные задачи

Maven:

                    
<aptMode>stubsAndApt</aptMode>
                    
                

CLI: -Kapt-mode=stubsAndApt

classpath

Элементы classpath, в которых выполняется поиск процессоров аннотаций.

Gradle:

                    dependencies {
                        kapt("com.example:processor:1.0")
                    }
                

Maven:

                    
<annotationProcessorPaths>
    <annotationProcessorPath>...</annotationProcessorPath>
</annotationProcessorPaths>
                    
                

CLI: -Kapt-classpath=lib/my-processor.jar

processors

Разделённые запятыми полные имена классов процессоров, которые нужно запустить, минуя поиск.

Gradle:

                    kapt {
                        annotationProcessor("com.example.MyProcessor")
                    }
                

Maven:

                    
<annotationProcessors>
    <annotationProcessor>com.example.MyProcessor</annotationProcessor>
</annotationProcessors>
                    
                

CLI: -Kapt-processors=com.example.MyProcessor

apOption

Параметры в формате «ключ — значение», передаваемые процессорам аннотаций.

Gradle:

                    kapt {
                        arguments {
                            arg("room.schemaLocation", "$projectDir/schemas")
                        }
                    }
                

Maven:

                    
<annotationProcessorArgs>
    <annotationProcessorArg>room.schemaLocation=/schemas</annotationProcessorArg>
</annotationProcessorArgs>
                    
                

CLI: -Kapt-options:room.schemaLocation=/schemas

javacOption

Параметры в формате «ключ — значение», передаваемые компилятору Java.

Gradle:

                    kapt {
                        javacOptions {
                            option("-source", "11")
                        }
                    }
                

Maven:

                    
<javacOptions>
    <javacOption>-source=11</javacOption>
</javacOptions>
                    
                

CLI: -Kapt-javac-option:-source=11

processIncrementally

Включает инкрементальную обработку аннотаций: повторно обрабатываются только файлы, затронутые изменениями.

Gradle:

                    # gradle.properties
                    kapt.incremental.apt=true
                

Maven: в настоящее время не поддерживается

CLI: в настоящее время не поддерживается

Параметры выходных каталогов

Параметр

Описание

Настройка

sources

Каталог, в котором процессоры аннотаций создают исходные файлы .java.

Gradle: автоматически устанавливается в build/generated/source/kapt/main

Maven: автоматически устанавливается в target/generated-sources/kapt/

CLI: -Kapt-sources=build/kapt/sources

classes

Каталог для файлов .class, скомпилированных из сгенерированных исходных файлов.

Gradle: управляется автоматически

Maven: управляется автоматически

CLI: -Kapt-classes=build/kapt/classes

stubs

Каталог для файлов-заглушек Java, сгенерированных из исходных файлов Kotlin и используемых как входные данные для процессоров аннотаций.

Gradle: управляется автоматически

Maven: управляется автоматически

CLI: -Kapt-stubs=build/kapt/stubs

incrementalData

Хранит состояние для инкрементальных сборок.

Gradle: управляется автоматически

Maven: в настоящее время не поддерживается

CLI: в настоящее время не поддерживается

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

Параметр

Описание

Настройка

correctErrorTypes

По умолчанию kapt заменяет каждый неизвестный тип (включая типы для сгенерированных классов) на NonExistentClass. Можно включить подстановку типов ошибок в заглушках, чтобы заменять неразрешённые типы ошибок типами из сгенерированных исходных файлов.

false по умолчанию

Gradle:

                    kapt {
                        correctErrorTypes = true
                    }
                

Maven:

                    
<correctErrorTypes>true</correctErrorTypes>
                    
                

CLI: -Kapt-correct-error-types=true

dumpDefaultParameterValues

Добавляет инициализаторы параметров по умолчанию в качестве значений полей в сгенерированные заглушки.

false по умолчанию

Gradle:

                    kapt {
                        dumpDefaultParameterValues = true
                    }
                

Maven: недоступно

CLI: -Kapt-dump-default-parameter-values=true

mapDiagnosticLocations

Сопоставляет сообщения об ошибках из файлов-заглушек с исходными позициями в коде Kotlin.

false по умолчанию

Gradle:

                    kapt {
                        mapDiagnosticLocations = true
                    }
                

Maven:

                    
<mapDiagnosticLocations>true</mapDiagnosticLocations>
                    
                

CLI: -Kapt-map-diagnostic-locations=true

strict

Преобразует несовместимости при генерации заглушек в ошибки вместо предупреждений.

false по умолчанию

Gradle:

                    kapt {
                        strictMode = true
                    }
                

Maven: недоступно

CLI: -Kapt-strict=true

stripMetadata

Удаляет аннотации @kotlin.Metadata из сгенерированных заглушек, уменьшая их размер и скрывая от процессоров информацию, специфичную для Kotlin.

false по умолчанию

Gradle:

                    kapt {
                        stripMetadata = true
                    }
                

Maven: недоступно

CLI: -Kapt-strip-metadata=true

verbose

Включает подробное ведение журнала kapt.

false по умолчанию

Gradle:

                    # gradle.properties
                    kapt.verbose=true
                

Maven: в настоящее время не поддерживается

CLI: в настоящее время не поддерживается

infoAsWarnings

Повышает уровень информационных сообщений kapt до предупреждений.

false по умолчанию

Gradle: напрямую недоступно

Maven: в настоящее время не поддерживается

CLI: в настоящее время не поддерживается

includeCompileClasspath

Выполняет поиск процессоров аннотаций в classpath компиляции. Для воспроизводимости задайте значение false.

true по умолчанию

Gradle:

                    kapt {
                        includeCompileClasspath = false
                    }
                

Maven:

                    
<includeCompileClasspath>false</includeCompileClasspath>
                    
                

CLI: в настоящее время не поддерживается

Параметры диагностики и статистики

Параметр

Описание

Настройка

showProcessorStats

Выводит время выполнения для каждого процессора в stdout.

Gradle:

                    kapt {
                        showProcessorStats = true
                    }
                

Maven: недоступно

CLI: -Kapt-show-processor-stats=true

dumpProcessorStats

Записывает статистику времени работы процессоров в файл.

Gradle: недоступно

Maven: недоступно

CLI: -Kapt-dump-processor-stats=build/kapt-stats.txt

dumpFileReadHistory

Записывает в файл список файлов, прочитанных процессорами; это полезно для отладки инкрементальной обработки аннотаций.

Gradle: недоступно

Maven: недоступно

CLI: -Kapt-dump-file-read-history=build/kapt-reads.txt

detectMemoryLeaks

Режим обнаружения утечек памяти: none, default или paranoid.

Gradle:

                    kapt {
                        detectMemoryLeaks = "paranoid"
                    }
                

Maven: в настоящее время не поддерживается

CLI: в настоящее время не поддерживается

Что дальше

  • Использование kapt с процессором аннотаций MapStruct

  • Как перейти с kapt на KSP

7 августа 2026 г.
Плагин компилятора all-openПлагин компилятора Lombok

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

Spec-Zone.ru

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