KSP в Kotlin Multiplatform
Здесь вы узнаете, как использовать обработку символов Kotlin (KSP) в проекте Kotlin Multiplatform. Чтобы быстро начать, ознакомьтесь с примером многоплатформенного проекта с несколькими целевыми платформами, в котором используется KSP, в репозитории исходного кода. Процессор в этом примере генерирует класс Foo, используемый проектом.
Добавление KSP в многоплатформенный проект
В файле build.gradle.kts клиентского модуля (модуля, использующего процессор) добавьте соответствующую зависимость от процессора KSP для каждой целевой платформы, которой требуется обработка символов:
dependencies {
add("ksp<Target>", <processor>)
}
-
<Target>— одна из целевых платформ, используемых в вашем многоплатформенном проекте. -
<processor>— путь к проекту Gradle. Это может быть:-
определённая директория вашего проекта, содержащая логику процессора символов:
add("kspJvm", project(":local-processor")) -
внешний процессор, например Room:
add("kspJvm", "androidx.room:room-compiler:2.6.1")
-
Использование нескольких процессоров для одной целевой платформы
Для одной целевой платформы можно добавить несколько процессоров:
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иjvmTestJS:
jsMainиjsTestLinuxX64:
linuxX64MainиlinuxX64TestAndroidNativeX64:
androidNativeX64MainиandroidNativeX64TestAndroidNativeArm64:
androidNativeArm64MainиandroidNativeArm64TestMingwX64:
mingwX64MainиmingwX64Test
В файле workload/build.gradle.kts примера зависимости KSP объявлены для следующих конфигураций:
kspJvmиkspJvmTestkspJsиkspJsTestkspAndroidNativeX64иkspAndroidNativeX64TestkspAndroidNativeArm64иkspAndroidNativeArm64TestkspLinuxX64kspMingwX64
KSP создаёт задачу обработки символов для каждой конфигурации, в которой объявлена зависимость KSP. В этом примере проект создаёт как минимум 12 задач компиляции Kotlin и 10 задач обработки символов. Для остальных компиляций соответствующие задачи KSP не создаются, поскольку 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