Spec-Zone.ru › Kotlin 2

Справочник по DSL Gradle для Kotlin Multiplatform

Плагин Kotlin Multiplatform для Gradle — это инструмент для создания проектов Kotlin Multiplatform. Здесь приведен справочник по его содержимому; используйте его как памятку при написании сценариев сборки Gradle для проектов Kotlin Multiplatform. Узнайте о концепциях проектов Kotlin Multiplatform, а также о том, как создавать и настраивать такие проекты.

Идентификатор и версия

Полное имя плагина Kotlin Multiplatform для Gradle — org.jetbrains.kotlin.multiplatform. Если вы используете DSL Kotlin для Gradle, применить плагин можно с помощью kotlin("multiplatform"). Версии плагина соответствуют версиям выпусков Kotlin. Последняя версия — 2.4.20.

plugins {
    kotlin("multiplatform") version "2.4.20"
}
plugins {
    id 'org.jetbrains.kotlin.multiplatform' version '2.4.20'
}

Блоки верхнего уровня

kotlin {} — это блок верхнего уровня для настройки многоплатформенного проекта в сценарии сборки Gradle. Внутри kotlin {} можно использовать следующие блоки:

Блок

Описание

<targetName>

Объявляет конкретную цель проекта. Имена доступных целей перечислены в разделе «Цели».

targets

Перечисляет все цели проекта.

sourceSets

Настраивает предопределенные и объявляет пользовательские наборы исходного кода проекта.

compilerOptions

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

dependencies

Настраивает общие зависимости. (Экспериментальная возможность)

Цели

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

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

Цели многоплатформенного проекта описываются в соответствующих блоках внутри kotlin {}, например jvm, android, iosArm64. Полный список доступных целей:

Целевая платформа

Цель

Комментарии

Kotlin/JVM

jvm

Kotlin/Wasm

wasmJs

Выберите эту цель, если планируете запускать проекты в среде выполнения JavaScript.

wasmWasi

Выберите эту цель, если вам нужна поддержка системного интерфейса WASI.

Kotlin/JS

js

Выберите среду выполнения:

  • browser {} для приложений, работающих в браузере.

  • nodejs {} для приложений, работающих в Node.js.

Подробнее см. в разделе Настройка проекта Kotlin/JS.

Kotlin/Native

О поддерживаемых в настоящее время целях для хостов macOS, Linux и Windows см. в разделе Поддержка целей Kotlin/Native.

Приложения и библиотеки Android

android

Примените плагин Android Gradle вручную: com.android.application или com.android.kotlin.multiplatform.library.

Для каждого подпроекта Gradle можно создать только одну цель Android.

Цель, не поддерживаемая текущим хостом, игнорируется при сборке и поэтому не публикуется.

kotlin {
    jvm()
    iosArm64()
    macosArm64()
    js().browser()
}

Конфигурация цели может включать две части:

  • Общая конфигурация, доступная для всех целей.

  • Конфигурация, специфичная для цели.

У каждой цели может быть одна или несколько компиляций.

Общая конфигурация цели

В любом блоке цели можно использовать следующие объявления:

Имя

Описание

platformType

Платформа Kotlin для этой цели. Доступные значения: jvm, androidJvm, js, wasm, native, common.

artifactsTaskName

Имя задачи, которая собирает итоговые артефакты этой цели.

components

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

compilerOptions

Параметры компилятора, используемые для цели. Это объявление переопределяет любые compilerOptions {}, настроенные на верхнем уровне.

Веб-цели

Блок js {} описывает конфигурацию целей Kotlin/JS, а блок wasmJs {} — конфигурацию целей Kotlin/Wasm, совместимых с JavaScript. В зависимости от среды выполнения цели они могут содержать один из двух блоков:

Имя

Описание

browser

Конфигурация цели для браузера.

nodejs

Конфигурация цели для Node.js.

Подробнее о настройке проектов Kotlin/JS.

Отдельный блок wasmWasi {} описывает конфигурацию целей Kotlin/Wasm, поддерживающих системный интерфейс WASI. Он поддерживает среды выполнения nodejs и wasmtime:

kotlin {
    wasmWasi {
        nodejs()
        wasmtime()
        binaries.executable()
    }
}

Все веб-цели — js, wasmJs и wasmWasi — также поддерживают вызов binaries.executable(). Он явно указывает компилятору Kotlin создавать исполняемые файлы. Дополнительную информацию см. в разделе Среды выполнения документации Kotlin/JS.

Браузер

browser {} может содержать следующие блоки конфигурации:

Имя

Описание

testRuns

Настройка выполнения тестов.

runTask

Настройка запуска проекта.

webpackTask

Настройка сборки проекта с помощью Webpack.

distribution

Путь к выходным файлам.

kotlin {
    js().browser {
        webpackTask { /* ... */ }
        testRuns { /* ... */ }
        distribution {
            directory = File("$projectDir/customdir/")
        }
    }
}

Node.js

nodejs {} может содержать конфигурации задач тестирования и запуска:

Имя

Описание

testRuns

Настройка выполнения тестов.

runTask

Настройка запуска проекта.

kotlin {
    js().nodejs {
        runTask { /* ... */ }
        testRuns { /* ... */ }
    }
}

Нативные цели

Для нативных целей доступны следующие специальные блоки:

Имя

Описание

binaries

Настройка создаваемых бинарных файлов.

cinterops

Настройка взаимодействия с библиотеками C.

Бинарные файлы

Доступны следующие типы бинарных файлов:

Имя

Описание

executable

Исполняемый файл продукта.

test

Исполняемый файл тестов.

sharedLib

Динамическая библиотека.

staticLib

Статическая библиотека.

framework

Фреймворк Objective-C.

kotlin {
    linuxX64 { // Use your target instead.
        binaries {
            executable {
                // Binary configuration.
            }
        }
    }
}

Для настройки бинарных файлов доступны следующие параметры:

Имя

Описание

compilation

Компиляция, на основе которой создается бинарный файл. По умолчанию бинарные файлы test создаются на основе компиляции test, а остальные бинарные файлы — на основе компиляции main.

linkerOpts

Параметры, передаваемые системному компоновщику при сборке бинарного файла.

baseName

Пользовательское базовое имя выходного файла. Итоговое имя файла будет сформировано добавлением к нему системно-зависимых префикса и суффикса.

entryPoint

Точка входа для исполняемых бинарных файлов. По умолчанию это main() в корневом пакете.

outputFile

Доступ к выходному файлу.

linkTask

Доступ к задаче компоновки.

runTask

Доступ к задаче запуска для исполняемых бинарных файлов. Для целей, отличных от linuxX64, macosArm64 и mingwX64, значение равно null.

isStatic

Для фреймворков Objective-C. Включает статическую библиотеку вместо динамической.

disableNativeCache

Отключает кэш компиляции. Используйте этот параметр только в исключительных случаях, так как он увеличивает время компиляции.

Необходимо указать компонент Kotlin version, для которого отключается кэш, и reason. При необходимости можно указать URL-адрес issue в вашей системе отслеживания ошибок.

binaries {
    executable("my_executable", listOf(RELEASE)) {
        // Build a binary on the basis of the test compilation.
        compilation = compilations["test"]

        // Custom command line options for the linker.
        linkerOpts = mutableListOf("-L/lib/search/path", "-L/another/search/path", "-lmylib")

        // Base name for the output file.
        baseName = "foo"

        // Custom entry point function.
        entryPoint = "org.example.main"

        // Accessing the output file.
        println("Executable path: ${outputFile.absolutePath}")

        // Accessing the link task.
        linkTask.dependsOn(additionalPreprocessingTask)

        // Accessing the run task.
        // Note that the runTask is null for non-host platforms.
        runTask?.dependsOn(prepareForRun)
    }

    framework("my_framework" listOf(RELEASE)) {
        // Include a static library instead of a dynamic one into the framework.
        isStatic = true

        // Disable compilation cache for this binary
        disableNativeCache(
            version = DisableCacheInKotlinVersion.2_3_0,
            reason = "Cache bug",
            issue = URI("https://youtrack.com/YY-1111")
        )
    }
}
binaries {
    executable('my_executable', [RELEASE]) {
        // Build a binary on the basis of the test compilation.
        compilation = compilations.test

        // Custom command line options for the linker.
        linkerOpts = ['-L/lib/search/path', '-L/another/search/path', '-lmylib']

        // Base name for the output file.
        baseName = 'foo'

        // Custom entry point function.
        entryPoint = 'org.example.main'

        // Accessing the output file.
        println("Executable path: ${outputFile.absolutePath}")

        // Accessing the link task.
        linkTask.dependsOn(additionalPreprocessingTask)

        // Accessing the run task.
        // Note that the runTask is null for non-host platforms.
        runTask?.dependsOn(prepareForRun)
    }

    framework('my_framework' [RELEASE]) {
        // Include a static library instead of a dynamic one into the framework.
        isStatic = true

        // Disable compilation cache for this binary
        disableNativeCache(
            version = DisableCacheInKotlinVersion .2_3_0,
            reason = 'Cache bug',
            issue = URI('https://youtrack.com/YY-1111')
        )
    }
}

Подробнее о сборке нативных бинарных файлов.

Cinterop

cinterops — это набор описаний для взаимодействия с нативными библиотеками. Чтобы обеспечить взаимодействие с библиотекой, добавьте запись в cinterops и задайте ее параметры:

Имя

Описание

definitionFile

Файл .def с описанием нативного API.

packageName

Префикс пакета для сгенерированного API Kotlin.

compilerOpts

Параметры, передаваемые компилятору инструментом cinterop.

includeDirs

Каталоги для поиска заголовочных файлов.

header

Заголовочный файл, который нужно включить в привязки.

headers

Список заголовочных файлов, которые нужно включить в привязки.

kotlin {
    linuxX64 { // Replace with a target you need.
        compilations.getByName("main") {
            val myInterop by cinterops.creating {
                // Definition file describing the native API.
                // The default path is src/nativeInterop/cinterop/<interop-name>.def
                definitionFile.set(project.file("def-file.def"))

                // Package to place the Kotlin API generated.
                packageName("org.sample")

                // Options to be passed to compiler by cinterop tool.
                compilerOpts("-Ipath/to/headers")

                // Directories for header search (an analogue of the -I<path> compiler option).
                includeDirs.allHeaders("path1", "path2")

                // A shortcut for includeDirs.allHeaders.
                includeDirs("include/directory", "another/directory")

                // Header files to be included in the bindings.
                header("path/to/header.h")
                headers("path/to/header1.h", "path/to/header2.h")
            }

            val anotherInterop by cinterops.creating { /* ... */ }
        }
    }
}
kotlin {
    linuxX64 { // Replace with a target you need.
        compilations.main {
            cinterops {
                myInterop {
                    // Definition file describing the native API.
                    // The default path is src/nativeInterop/cinterop/<interop-name>.def
                    definitionFile = project.file("def-file.def")

                    // Package to place the Kotlin API generated.
                    packageName 'org.sample'

                    // Options to be passed to compiler by cinterop tool.
                    compilerOpts '-Ipath/to/headers'

                    // Directories for header search (an analogue of the -I<path> compiler option).
                    includeDirs.allHeaders("path1", "path2")

                    // A shortcut for includeDirs.allHeaders.
                    includeDirs("include/directory", "another/directory")

                    // Header files to be included in the bindings.
                    header("path/to/header.h")
                    headers("path/to/header1.h", "path/to/header2.h")
                }

                anotherInterop { /* ... */ }
            }
        }
    }
}

Дополнительные свойства cinterop см. в разделе Файл описания.

Цели Android

Плагин Kotlin Multiplatform для Gradle содержит специальную функцию, которая помогает настраивать варианты сборки для цели Android:

Имя

Описание

publishLibraryVariants()

Задает варианты сборки для публикации. Подробнее о публикации библиотек Android.

kotlin {
    android {
        publishLibraryVariants("release")
    }
}

Подробнее о компиляции для Android.

Конфигурация android внутри блока kotlin {} не заменяет конфигурацию сборки какого-либо проекта Android. Подробнее о написании сценариев сборки для проектов Android см. в документации для разработчиков Android.

Наборы исходного кода

Блок sourceSets {} описывает наборы исходного кода проекта. Набор исходного кода содержит файлы исходного кода Kotlin, которые участвуют в компиляциях вместе со своими ресурсами и зависимостями.

Многоплатформенный проект содержит предопределенные наборы исходного кода для своих целей; разработчики также могут создавать пользовательские наборы в соответствии со своими потребностями.

Предопределенные наборы исходного кода

Предопределенные наборы исходного кода настраиваются автоматически при создании многоплатформенного проекта. Доступны следующие предопределенные наборы:

Имя

Описание

commonMain

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

commonTest

Тестовый код и ресурсы, общие для всех платформ. Доступен во всех многоплатформенных проектах. Используется во всех тестовых компиляциях проекта.

<targetName><compilationName>

Исходный код для конкретной цели и компиляции. <targetName> — имя предопределенной цели, а <compilationName> — имя компиляции для этой цели. Примеры: jsTest, jvmMain.

kotlin {
    //...
    sourceSets {
        commonMain { /* ... */ }
    }
}
kotlin {
    //...
    sourceSets { 
        commonMain { /* ... */ }
    }
}

Подробнее о наборах исходного кода.

Пользовательские наборы исходного кода

Пользовательские наборы исходного кода создаются разработчиками проекта вручную. Чтобы создать пользовательский набор, добавьте раздел с его именем внутри раздела sourceSets. При использовании DSL Kotlin для Gradle помечайте пользовательские наборы исходного кода как by creating.

kotlin {
    //...
    sourceSets { 
        val myMain by creating { /* ... */ } // create a new source set by the name 'MyMain'
    }
}
kotlin {
    //...
    sourceSets { 
        myMain { /* ... */ } // create or configure a source set by the name 'myMain' 
    }
}

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

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

Конфигурации наборов исходного кода хранятся в соответствующих блоках sourceSets {}. У набора исходного кода есть следующие параметры:

Имя

Описание

kotlin.srcDir

Расположение файлов исходного кода Kotlin в каталоге набора исходного кода.

resources.srcDir

Расположение ресурсов в каталоге набора исходного кода.

dependsOn

Связь с другим набором исходного кода.

dependencies

Зависимости набора исходного кода.

languageSettings

Настройки языка, применяемые к общему набору исходного кода.

kotlin { 
    //...
    sourceSets { 
        commonMain {
            kotlin.srcDir("src")
            resources.srcDir("res")

            dependencies {
                /* ... */
            }
        }
    }
}
kotlin { 
    //...
    sourceSets { 
        commonMain {
            kotlin.srcDir('src')
            resources.srcDir('res')

            dependencies {
                /* ... */
            }
        }
    }
}

Компиляции

У цели может быть одна или несколько компиляций, например для production или тестирования. Существуют предопределённые компиляции, которые добавляются автоматически при создании цели. Кроме того, можно создавать пользовательские компиляции.

Чтобы обратиться ко всем компиляциям цели или к некоторым из них, используйте коллекцию объектов compilations. С помощью compilations можно обратиться к компиляции по её имени.

Подробнее о настройке компиляций.

Предопределённые компиляции

Предопределённые компиляции создаются автоматически для каждой цели проекта, кроме целей Android. Доступны следующие предопределённые компиляции:

Имя

Описание

main

Компиляция исходного кода для production.

test

Компиляция для тестов.

kotlin {
    jvm {
        val main by compilations.getting {
            output // get the main compilation output
        }

        compilations["test"].runtimeDependencyFiles // get the test runtime classpath
    }
}
kotlin {
    jvm {
        compilations.main.output // get the main compilation output
        compilations.test.runtimeDependencyFiles // get the test runtime classpath
    }
}

Пользовательские компиляции

Помимо предопределённых компиляций, можно создавать собственные пользовательские компиляции. Для этого настройте отношение associateWith между новой компиляцией и компиляцией main. Если вы используете Kotlin Gradle DSL, пометьте пользовательские компиляции с помощью by creating:

kotlin {
    jvm {
        compilations {
            val main by getting
            val integrationTest by creating {
                // Import main and its classpath as dependencies and establish internal visibility
                associateWith(main)
                defaultSourceSet {
                    dependencies {
                        implementation(kotlin("test-junit"))
                        /* ... */
                    }
                }

                // Create a test task to run the tests produced by this compilation
                testRuns.create("integration") {
                    // Configure the test task
                    setExecutionSourceFrom(integrationTest)
                }
            }
        }
    }
}
kotlin {
    jvm {
        compilations.create('integrationTest') {
            def main = compilations.main
            // Import main and its classpath as dependencies and establish internal visibility
            associateWith(main)
            defaultSourceSet {
                dependencies {
                    implementation kotlin('test-junit')
                    /* ... */
                }
            }

            // Create a test task to run the tests produced by this compilation
            testRuns.create('integration') {
                // Configure the test task
                setExecutionSourceFrom(compilations.integrationTest)
            }
        }
    }
}

Связывая компиляции, вы добавляете выходные данные основной компиляции в качестве зависимости и устанавливаете видимость internal между компиляциями.

Подробнее о создании пользовательских компиляций.

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

Компиляция имеет следующие параметры:

Имя

Описание

defaultSourceSet

Набор исходного кода компиляции по умолчанию.

kotlinSourceSets

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

allKotlinSourceSets

Наборы исходного кода, участвующие в компиляции, и их связи через dependsOn().

compilerOptions

Параметры компилятора, применяемые к компиляции. Список доступных параметров см. в разделе Параметры компилятора.

compileKotlinTask

Задача Gradle для компиляции исходного кода Kotlin.

compileKotlinTaskName

Имя compileKotlinTask.

compileAllTaskName

Имя задачи Gradle для компиляции всего исходного кода компиляции.

output

Результат компиляции.

compileDependencyFiles

Файлы зависимостей времени компиляции (classpath) компиляции. Для всех компиляций Kotlin/Native сюда автоматически включаются стандартная библиотека и платформенные зависимости.

runtimeDependencyFiles

Файлы зависимостей времени выполнения (classpath) компиляции.

kotlin {
    jvm {
        val main by compilations.getting {
            compileTaskProvider.configure {
                compilerOptions {
                    // Set up the Kotlin compiler options for the 'main' compilation:
                    jvmTarget.set(JvmTarget.JVM_1_8)
                }
            }
        
            compileKotlinTask // get the Kotlin task 'compileKotlinJvm' 
            output // get the main compilation output
        }
        
        compilations["test"].runtimeDependencyFiles // get the test runtime classpath
    }

    // Configure all compilations of all targets:
    compilerOptions {
        allWarningsAsErrors.set(true)
    }
}
kotlin {
    jvm {
        compilations.main {
            compileTaskProvider.configure {
                compilerOptions {
                    // Setup the Kotlin compiler options for the 'main' compilation:
                    jvmTarget = JvmTarget.JVM_1_8
                }
            }
        }

        compilations.main.compileKotlinTask // get the Kotlin task 'compileKotlinJvm' 
        compilations.main.output // get the main compilation output
        compilations.test.runtimeDependencyFiles // get the test runtime classpath
    }

    // Configure all compilations of all targets:
    compilerOptions {
        allWarningsAsErrors = true
    }
}

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

В проектах можно настраивать параметры компилятора на трёх разных уровнях:

  • Уровень расширения, в блоке kotlin {}.

  • Уровень цели, в блоке цели.

  • Уровень единицы компиляции, обычно в конкретной задаче компиляции.

Kotlin compiler options levels

Настройки более высокого уровня используются по умолчанию для уровня ниже:

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

  • Параметры компилятора, заданные на уровне цели, используются по умолчанию для параметров уровня единицы компиляции (задачи), например для задач compileKotlinJvm и compileTestKotlinJvm.

Настройки, заданные на более низком уровне, переопределяют аналогичные настройки более высоких уровней:

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

  • Параметры компилятора на уровне цели переопределяют аналогичные настройки на уровне расширения.

Список возможных параметров компилятора см. в разделе Все параметры компилятора.

Уровень расширения

Чтобы настроить параметры компилятора для всех целей проекта, используйте блок compilerOptions {} на верхнем уровне:

kotlin {
    // Configures all compilations of all targets
    compilerOptions {
        allWarningsAsErrors.set(true)
    }
}
kotlin {
    // Configures all compilations of all targets:
    compilerOptions {
        allWarningsAsErrors = true
    }
}

Уровень цели

Чтобы настроить параметры компилятора для конкретной цели проекта, используйте блок compilerOptions {} внутри блока цели:

kotlin {
    jvm {
        // Configures all compilations of the JVM target
        compilerOptions {
            allWarningsAsErrors.set(true)
        }
    }
}
kotlin {
    jvm {
        // Configures all compilations of the JVM target
        compilerOptions {
            allWarningsAsErrors = true
        }
    }
}

Уровень единицы компиляции

Чтобы настроить параметры компилятора для конкретной задачи, используйте блок compilerOptions {} внутри задачи:

task.named<KotlinJvmCompile>("compileKotlinJvm") {
    compilerOptions {
        allWarningsAsErrors.set(true)
    }
}
task.named<KotlinJvmCompile>("compileKotlinJvm") {
    compilerOptions {
        allWarningsAsErrors = true
    }
}

Чтобы настроить параметры компилятора для конкретной компиляции, используйте блок compilerOptions {} в поставщике задач компиляции:

kotlin {
    jvm {
        compilations.named(KotlinCompilation.MAIN_COMPILATION_NAME) {
            compileTaskProvider.configure {
                // Configures the 'main' compilation:
                compilerOptions {
                    allWarningsAsErrors.set(true)
                }
            }
        }
    }
}
kotlin {
    jvm {
        compilations.named(KotlinCompilation.MAIN_COMPILATION_NAME) {
            compileTaskProvider.configure {
                // Configures the 'main' compilation:
                compilerOptions {
                    allWarningsAsErrors = true
                }
            }
        }
    }
}

Переход с kotlinOptions {} на compilerOptions {}

До Kotlin 2.2.0 параметры компилятора можно было настраивать с помощью блока kotlinOptions {}. Поскольку блок kotlinOptions {} устарел в Kotlin 2.2.0, вместо него необходимо использовать блок compilerOptions {} в скриптах сборки. Подробнее см. в разделе Переход с kotlinOptions{} на compilerOptions{}.

Зависимости

Блок dependencies {} объявления набора исходного кода содержит зависимости этого набора.

Подробнее о настройке зависимостей.

Существует четыре типа зависимостей:

Имя

Описание

api

Зависимости, используемые в API текущего модуля.

implementation

Зависимости, используемые в модуле, но не предоставляемые за его пределами.

compileOnly

Зависимости, используемые только для компиляции текущего модуля.

runtimeOnly

Зависимости, доступные во время выполнения, но невидимые при компиляции любого модуля.

kotlin {
    //...
    sourceSets {
        commonMain {
            dependencies {
                api("com.example:foo-metadata:1.0")
            }
        }
        jvmMain {
            dependencies {
                implementation("com.example:foo-jvm:1.0")
            }
        }
    }
}
kotlin {
    //...
    sourceSets {
        commonMain {
            dependencies {
                api 'com.example:foo-metadata:1.0'
            }
        }
        jvmMain {
            dependencies {
                implementation 'com.example:foo-jvm:1.0'
            }
        }
    }
}

Кроме того, наборы исходного кода могут зависеть друг от друга, образуя иерархию. В этом случае используется отношение dependsOn().

Настройка зависимостей на верхнем уровне

Общие зависимости можно настроить с помощью блока dependencies {} верхнего уровня. Объявленные здесь зависимости действуют так, как если бы они были добавлены в наборы исходного кода commonMain или commonTest.

Чтобы использовать блок dependencies {} верхнего уровня, предоставьте согласие, добавив перед блоком аннотацию @OptIn(ExperimentalKotlinGradlePluginApi::class):

kotlin {
    @OptIn(ExperimentalKotlinGradlePluginApi::class)
    dependencies {
        implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.11.0")
    }
}
kotlin {
    dependencies {
        implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.11.0'
    }
}

Добавьте платформо-зависимые зависимости в блок sourceSets {} соответствующей цели.

Оставить отзыв об этой функции можно в YouTrack.

Настройки языка

Блок languageSettings {} в наборе исходного кода определяет некоторые аспекты анализа и компиляции проекта. Используйте блок languageSettings {} только для настройки параметров, относящихся именно к общему набору исходного кода. Во всех остальных случаях используйте блок compilerOptions {}, чтобы настроить параметры компилятора на уровне расширения или цели.

Доступны следующие настройки языка:

Имя

Описание

languageVersion

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

apiVersion

Разрешает использовать объявления только из библиотек Kotlin, входящих в указанную версию.

enableLanguageFeature

Включает указанную языковую возможность. Доступные значения соответствуют языковым возможностям, которые в настоящее время являются экспериментальными или когда-либо вводились как экспериментальные.

optIn

Разрешает использовать указанную аннотацию opt-in.

progressiveMode

Включает прогрессивный режим.

kotlin {
    sourceSets.all {
        languageSettings.apply {
            languageVersion = "2.4" // possible values: "2.0", "2.1", "2.2", "2.3", "2.4", "2.5" (EXPERIMENTAL)
            apiVersion = "2.4" // possible values: "2.0", "2.1", "2.2", "2.3", "2.4", "2.5" (EXPERIMENTAL)
            enableLanguageFeature("InlineClasses") // language feature name
            optIn("kotlin.ExperimentalUnsignedTypes") // annotation FQ-name
            progressiveMode = true // false by default
        }
    }
}
kotlin {
    sourceSets.all {
        languageSettings {
            languageVersion = '2.4' // possible values: '2.0', '2.1', '2.2', '2.3', '2.4', '2.5' (EXPERIMENTAL)
            apiVersion = '2.4' // possible values: '2.0', '2.1', '2.2', '2.3', '2.4', '2.5' (EXPERIMENTAL)
            enableLanguageFeature('InlineClasses') // language feature name
            optIn('kotlin.ExperimentalUnsignedTypes') // annotation FQ-name
            progressiveMode = true // false by default
        }
    }
}
7 сентября 2026
Горячая перезагрузка ComposeНастройка проекта с помощью Kotlin Toolchain

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

Spec-Zone.ru

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