Spec-Zone.ru › Kotlin 2

KSP в Kotlin Multiplatform

Здесь вы узнаете, как использовать обработку символов Kotlin (KSP) в проекте Kotlin Multiplatform. Чтобы быстро начать, ознакомьтесь с примером многоплатформенного проекта с несколькими целевыми платформами, в котором используется KSP, в репозитории исходного кода. Процессор в этом примере генерирует класс Foo, используемый проектом.

Добавление KSP в многоплатформенный проект

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

dependencies {
  add("ksp<Target>", <processor>)
}
  • <Target> — одна из целевых платформ, используемых в вашем многоплатформенном проекте.

    Полный список целевых платформ см. в справочнике по DSL Gradle для Multiplatform и в списке поддерживаемых целевых платформ Kotlin/Native.

  • <processor> — путь к проекту Gradle. Это может быть:

    • определённая директория вашего проекта, содержащая логику процессора символов:

      add("kspJvm", project(":local-processor"))
      
    • внешний процессор, например Room:

      add("kspJvm", "androidx.room:room-compiler:2.6.1")
      

Начиная с KSP 2 конфигурация ksp(...), охватывающая все цели, объявлена устаревшей. Настройте каждую целевую платформу отдельно, чтобы не запускать процессоры там, где они не нужны.

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

Для одной целевой платформы можно добавить несколько процессоров:

add("kspAndroid", project(":test-processor"))
add("kspAndroid", "androidx.room:room-compiler:2.6.1")
add('kspAndroid', project(':test-processor'))
add('kspAndroid', 'androidx.room:room-compiler:2.6.1')

Использование одного процессора для нескольких целевых платформ

Один процессор можно добавить для нескольких целевых платформ:

add("kspIosX64", project(":test-processor"))
add("kspIosArm64", project(":test-processor"))
add("kspIosSimulatorArm64", project(":test-processor"))
add('kspIosX64', project(':test-processor'))
add('kspIosArm64', project(':test-processor'))
add('kspIosSimulatorArm64', project(':test-processor'))

Если у вас много целевых платформ iOS, можно избежать повторений с помощью цикла:

kotlin.targets.filter { it.name.startsWith("ios") }.forEach { target ->
    add(
        "ksp${target.name.replaceFirstChar { it.uppercaseChar() }}",
        project(":test-processor")
    )
}
kotlin.targets.filter { it.name.startsWith("ios") }.forEach { target ->
    add(
        "ksp${target.name.replaceFirstChar { it.uppercaseChar() }}",
        project(":test-processor")
    )
}

Настройка KSP для тестовых компиляций

Чтобы запускать KSP во время компиляции тестов, добавьте процессор в соответствующие тестовые конфигурации:

add("kspJvmTest", project(":test-processor"))
add("kspJsTest", project(":test-processor"))
add("kspIosX64Test", project(":test-processor"))
add('kspJvmTest', project(':test-processor'))
add('kspJsTest', project(':test-processor'))
add('kspIosX64Test', project(':test-processor'))

Для тестов Android на хосте и устройстве KSP формирует имена конфигураций на основе имён соответствующих наборов исходного кода:

add("kspAndroidHostTest", project(":test-processor"))
add("kspAndroidDeviceTest", project(":test-processor"))
add('kspAndroidHostTest', project(':test-processor'))
add('kspAndroidDeviceTest', project(':test-processor'))

Поиск имён конфигураций KSP

KSP формирует имена конфигураций на основе наборов исходного кода Kotlin Multiplatform. Чтобы просмотреть полный список конфигураций KSP для модуля, выполните команду:

./gradlew :<your-module-name>:dependencies | grep ksp

Найдите имена конфигураций, соответствующие наборам исходного кода ваших целевых платформ.

Компиляция и обработка

В многоплатформенном проекте Kotlin создаёт отдельную компиляцию для каждой целевой платформы и набора исходного кода, например main иtest. Для каждой задачи компиляции Kotlin с одним или несколькими настроенными процессорами KSP создаёт соответствующую задачу обработки символов.

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

  • JVM: jvmMain и jvmTest

  • JS: jsMain и jsTest

  • LinuxX64: linuxX64Main и linuxX64Test

  • AndroidNativeX64: androidNativeX64Main и androidNativeX64Test

  • AndroidNativeArm64: androidNativeArm64Main и androidNativeArm64Test

  • MingwX64: mingwX64Main и mingwX64Test

В файле workload/build.gradle.kts примера зависимости KSP объявлены для следующих конфигураций:

  • kspJvm и kspJvmTest

  • kspJs и kspJsTest

  • kspAndroidNativeX64 и kspAndroidNativeX64Test

  • kspAndroidNativeArm64 и kspAndroidNativeArm64Test

  • kspLinuxX64

  • kspMingwX64

KSP создаёт задачу обработки символов для каждой конфигурации, в которой объявлена зависимость KSP. В этом примере проект создаёт как минимум 12 задач компиляции Kotlin и 10 задач обработки символов. Для остальных компиляций соответствующие задачи KSP не создаются, поскольку KSP для них не настроен.

12 августа 2026 г.
Обработка в несколько раундовЗапуск KSP из командной строки

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

Spec-Zone.ru

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