Spec-Zone.ru › Kotlin 1.9

Настройка проекта Gradle

Для построения проекта Kotlin с Gradle, необходимо добавить плагин Kotlin Gradle в файл скрипта сборки build.gradle(.kts) и настроить зависимости проекта там же.

Чтобы узнать больше о содержимом скрипта сборки, посетите раздел Изучение скрипта сборки.

Применение плагина

Для применения плагина Kotlin Gradle, используйте plugins блок из DSL плагинов Gradle:

// replace `<...>` with the plugin name 
plugins {
    kotlin("<...>") version "1.9.0"
}
// replace `<...>` with the plugin name
plugins {
    id 'org.jetbrains.kotlin.<...>' version '1.9.0'
}

Плагин Kotlin Gradle (KGP) и Kotlin имеют одинаковую систему версий.

При настройке проекта проверьте совместимость плагина Kotlin Gradle (KGP) с доступными версиями Gradle. В следующей таблице указаны минимальные и максимальные полностью поддерживаемые версии Gradle и плагина Android Gradle (AGP):

Версия KGP

Минимальные и максимальные версии Gradle

Минимальные и максимальные версии AGP

1.9.0

6.8.3 – 7.6.0

4.2.2 – 7.4.0

1.8.20

6.8.3 – 7.6.0

4.1.3 – 7.4.0

1.8.0

6.8.3 – 7.3.3

4.1.3 – 7.2.1

1.7.20

6.7.1 – 7.1.1

3.6.4 – 7.0.4

1.7.0

6.7.1 – 7.0.2

3.4.3 – 7.0.2

1.6.20

6.1.1 - 7.0.2

3.4.3 - 7.0.2

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

Например, плагин Kotlin Gradle и плагин kotlin-multiplatform версии 1.9.0 требуют минимальной версии Gradle 6.8.3 для компиляции проекта.

Аналогично, максимальная полностью поддерживаемая версия — 7.6.0. Она не содержит устаревших методов и свойств Gradle и поддерживает все текущие функции Gradle.

Назначение JVM

Для назначения JVM примените плагин Kotlin JVM.

plugins {
    kotlin("jvm") version "1.9.0"
}
plugins {
    id "org.jetbrains.kotlin.jvm" version "1.9.0"
}

Значение version в этом блоке должно быть литеральным и не может быть применено из другого скрипта сборки.

Kotlin и Java исходные файлы

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

По умолчанию используются разные каталоги:

project
    - src
        - main (root)
            - kotlin
            - java

Не храните Java .java файлы в каталоге src/*/kotlin, так как файлы .java не будут скомпилированы.

Вместо этого можно использовать src/main/java.

Соответствующее свойство sourceSets должно быть обновлено, если вы не используете конвенцию по умолчанию:

sourceSets.main {
    java.srcDirs("src/main/myJava", "src/main/myKotlin")
}
sourceSets {
    main.kotlin.srcDirs += 'src/main/myKotlin'
    main.java.srcDirs += 'src/main/myJava'
}

Проверка совместимости JVM-таргетов связанных задач компиляции

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

  • compileKotlin и compileJava

  • compileTestKotlin и compileTestJava

main и test задачи компиляции наборов исходных файлов не связаны.

Для связанных задач, таких как эти, плагин Kotlin Gradle проверяет совместимость JVM-таргетов. Различные значения атрибута jvmTarget в расширении или задаче kotlin и targetCompatibility в расширении или задаче java вызывают несовместимость JVM-таргетов. Например: задача compileKotlin имеет jvmTarget=1.8, а задача compileJava имеет (или унаследовала) targetCompatibility=15.

Настройте поведение этой проверки для всего проекта, установив свойство kotlin.jvm.target.validation.mode в файле build.gradle(.kts) в значение:

  • error — плагин завершает сборку с ошибкой; значение по умолчанию для проектов на Gradle 8.0+.

  • warning — плагин выводит сообщение об ошибке; значение по умолчанию для проектов на Gradle менее 8.0.

  • ignore — плагин пропускает проверку и не выводит никаких сообщений.

Вы также можете настроить это на уровне задачи в файле build.gradle(.kts):

tasks.withType<org.jetbrains.kotlin.gradle.tasks.KotlinJvmCompile>().configureEach {
    jvmTargetValidationMode.set(org.jetbrains.kotlin.gradle.dsl.jvm.JvmTargetValidationMode.WARNING)
}
tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinJvmCompile.class).configureEach {
    jvmTargetValidationMode = org.jetbrains.kotlin.gradle.dsl.jvm.JvmTargetValidationMode.WARNING
}

Чтобы избежать несовместимости JVM-таргетов, настройте инструмент сборки или вручную согласуйте версии JVM.

Что может произойти, если не проверять совместимость целевых платформ

Существует два способа ручного задания JVM-таргетов для наборов исходных кодов Kotlin и Java:

  • Неявный способ через настройку Java-средств разработки.

  • Явный способ через установку атрибута jvmTarget в расширении или задаче kotlin и targetCompatibility в расширении или задаче java.

Несовместимость JVM-таргетов возникает, если:

  • Вы явно задаете разные значения jvmTarget и targetCompatibility.

  • У вас есть конфигурация по умолчанию, и ваша JDK не равна 1.8.

Рассмотрим конфигурацию по умолчанию JVM-таргетов, когда в скрипте сборки есть только плагин Kotlin JVM и нет дополнительных настроек для JVM-таргетов:

plugins {
    kotlin("jvm") version "1.9.0"
}
plugins {
    id "org.jetbrains.kotlin.jvm" version "1.9.0"
}

Когда в скрипте сборки нет явной информации о значении jvmTarget , его значение по умолчанию равно null, и компилятор преобразует его в значение по умолчанию 1.8. Значение targetCompatibility равно текущей версии JDK Gradle, которая равна вашей версии JDK (если вы не используете подход с Java toolchain). Предполагая, что ваша версия JDK — 17, ваш опубликованный артефакт библиотеки объявит себя совместимым с JDK 17+: org.gradle.jvm.version=17, что неверно. В этом случае вам необходимо использовать Java 17 в вашем основном проекте для добавления этой библиотеки, даже если версия байткода 1.8. Настройка toolchain решит эту проблему.

Поддержка Gradle Java toolchains

Предупреждение для пользователей Android. Чтобы использовать поддержку Gradle toolchain, используйте плагин Android Gradle (AGP) версии 8.1.0-alpha09 или выше.

Поддержка Gradle Java toolchain доступна только начиная с AGP 7.4.0. Тем не менее, из-за этой проблемы, AGP не устанавливал targetCompatibility в качестве JDK toolchain до версии 8.1.0-alpha09. Если вы используете версии ниже 8.1.0-alpha09, вам необходимо настроить targetCompatibility вручную через compileOptions. Замените заполнитель <MAJOR_JDK_VERSION> на версию JDK, которую вы хотите использовать:

android {
    compileOptions {
        sourceCompatibility = <MAJOR_JDK_VERSION>
        targetCompatibility = <MAJOR_JDK_VERSION>
    }
}

Gradle 6.7 ввёл поддержку Java toolchains. С помощью этой функции вы можете:

  • Использовать JDK и JRE, отличающиеся от тех, что используются Gradle, для выполнения компиляции, тестов и исполняемых файлов.

  • Компилировать и тестировать код с ещё не выпущенной версией языка.

С поддержкой toolchains, Gradle может автоматически обнаруживать локальные JDK и устанавливать недостающие JDK, необходимые Gradle для сборки. Теперь сам Gradle может работать на любом JDK и по-прежнему использовать функцию кэширования удалённых сборок для задач, зависящих от основной версии JDK.

Плагин Kotlin Gradle поддерживает Java toolchains для задач компиляции Kotlin/JVM. Задачи JS и Native не используют toolchains. Kotlin-компилятор всегда работает на JDK, на котором работает демон Gradle. Java toolchain:

  • Устанавливает -jdk-home опцию, доступную для целей JVM.

  • Устанавливает compilerOptions.jvmTarget на версию JDK toolchain, если пользователь не устанавливает jvmTarget опцию явно. Если пользователь не настраивает toolchain, поле jvmTarget использует значение по умолчанию. Подробнее о совместимости целевой JVM.

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

  • Влияет на то, на каком JDK kapt рабочие процессы выполняются.

Используйте следующий код для установки toolchain. Замените заполнитель <MAJOR_JDK_VERSION> на версию JDK, которую вы хотите использовать:

kotlin {
    jvmToolchain {
        languageVersion.set(JavaLanguageVersion.of(<MAJOR_JDK_VERSION>))
    }
    // Or shorter:
    jvmToolchain(<MAJOR_JDK_VERSION>)
    // For example:
    jvmToolchain(17)
}
kotlin {
    jvmToolchain {
        languageVersion.set(JavaLanguageVersion.of(<MAJOR_JDK_VERSION>))
    }
    // Or shorter:
    jvmToolchain(<MAJOR_JDK_VERSION>)
    // For example:
    jvmToolchain(17)
}

Обратите внимание, что установка toolchain через расширение kotlin обновляет toolchain для задач Java компиляции.

Вы можете установить toolchain через расширение java, и задачи компиляции Kotlin будут его использовать:

java {
    toolchain {
        languageVersion.set(JavaLanguageVersion.of(<MAJOR_JDK_VERSION>)) 
    }
}
java {
    toolchain {
        languageVersion.set(JavaLanguageVersion.of(<MAJOR_JDK_VERSION>)) 
    }
}

Если вы используете Gradle 8.0.2 или выше, вам также необходимо добавить плагин разрешения toolchains. Этот тип плагина управляет тем, откуда загружать toolchain.

plugins {
  id("org.gradle.toolchains.foojay-resolver-convention") version("0.5.0")
}
plugins {
  id 'org.gradle.toolchains.foojay-resolver-convention' version '0.5.0'
}

Проверьте, что версия foojay-resolver-convention соответствует вашей версии Gradle на сайте Gradle.

Чтобы понять, какой toolchain использует Gradle, запустите сборку Gradle с уровнем логирования --info и найдите в выводе строку, начинающуюся с [KOTLIN] Kotlin compilation 'jdkHome' argument:. Часть после двоеточия — это версия JDK из toolchain.

Для установки любого JDK (даже локального) для конкретной задачи используйте Task DSL.

Узнайте больше о поддержке Gradle JVM toolchain в плагине Kotlin.

Установка версии JDK с помощью Task DSL

Task DSL позволяет установить любую версию JDK для любой задачи, реализующей интерфейс UsesKotlinJavaToolchain. На данный момент такими задачами являются KotlinCompile и KaptTask. Если вы хотите, чтобы Gradle искал основную версию JDK, замените <MAJOR_JDK_VERSION> в вашем скрипте сборки:

val service = project.extensions.getByType<JavaToolchainService>()
val customLauncher = service.launcherFor {
    languageVersion.set(JavaLanguageVersion.of(<MAJOR_JDK_VERSION>))
}
project.tasks.withType<UsesKotlinJavaToolchain>().configureEach {
    kotlinJavaToolchain.toolchain.use(customLauncher)
}
JavaToolchainService service = project.getExtensions().getByType(JavaToolchainService.class)
Provider<JavaLauncher> customLauncher = service.launcherFor {
    it.languageVersion.set(JavaLanguageVersion.of(<MAJOR_JDK_VERSION>))
}
tasks.withType(UsesKotlinJavaToolchain::class).configureEach { task ->
    task.kotlinJavaToolchain.toolchain.use(customLauncher)
}

Или вы можете указать путь к вашему локальному JDK и заменить заполнитель <LOCAL_JDK_VERSION> на эту версию JDK:

tasks.withType<UsesKotlinJavaToolchain>().configureEach {
    kotlinJavaToolchain.jdk.use(
        "/path/to/local/jdk", // Put a path to your JDK
        JavaVersion.<LOCAL_JDK_VERSION> // For example, JavaVersion.17
    )
}

Связывание задач компиляции

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

Kotlin-компилятор по умолчанию связывает некоторые компиляции, такие как test и main компиляции каждого целевого объекта. Если вам нужно указать, что одна из ваших пользовательских компиляций связана с другой, создайте собственную связанную компиляцию.

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

val integrationTestCompilation = kotlin.target.compilations.create("integrationTest") {
    associateWith(kotlin.target.compilations.getByName("main"))
}
integrationTestCompilation {
    kotlin.target.compilations.create("integrationTest") {
        associateWith(kotlin.target.compilations.getByName("main"))
    }
}

Здесь компиляция integrationTest связана с компиляцией main, которая обеспечивает доступ к internal объектам из функциональных тестов.

Настройка с поддержкой Java модулей (JPMS)

Чтобы плагин Kotlin Gradle работал с Java модулями, добавьте следующие строки в свой скрипт сборки и замените YOUR_MODULE_NAME ссылкой на ваш JPMS модуль, например, org.company.module.

// Add the following three lines if you use a Gradle version less than 7.0
java {
    modularity.inferModulePath.set(true)
}

tasks.named("compileJava", JavaCompile::class.java) {
    options.compilerArgumentProviders.add(CommandLineArgumentProvider {
        // Provide compiled Kotlin classes to javac – needed for Java/Kotlin mixed sources to work
        listOf("--patch-module", "YOUR_MODULE_NAME=${sourceSets["main"].output.asPath}")
    })
}
// Add the following three lines if you use a Gradle version less than 7.0
java {
    modularity.inferModulePath = true
}

tasks.named("compileJava", JavaCompile.class) {
    options.compilerArgumentProviders.add(new CommandLineArgumentProvider() {
        @Override
        Iterable<String> asArguments() {
            // Provide compiled Kotlin classes to javac – needed for Java/Kotlin mixed sources to work
            return ["--patch-module", "YOUR_MODULE_NAME=${sourceSets["main"].output.asPath}"]
        }
    })
}

Поместите module-info.java в каталог src/main/java как обычно.

Для модуля имя пакета в Kotlin-файлах должно быть равно имени пакета из module-info.java, чтобы избежать ошибки сборки «пакет пуст или не существует».

Узнайте больше о:

  • Создании модулей для Java Module System

  • Создание приложений с использованием Java Module System

  • Что означает «модуль» в Kotlin

Дополнительные сведения

Узнайте больше о Kotlin/JVM.

Леничная создание задач Kotlin/JVM

Начиная с Kotlin 1.8.20, плагин Kotlin для Gradle регистрирует все задачи, но не настраивает их при выполнении пробного запуска.

Нестандартное расположение директории destinationDirectory задач компиляции

Если вы переопределяете расположение задачи Kotlin/JVM KotlinJvmCompile/KotlinCompile destinationDirectory, обновите свой скрипт сборки. Вам необходимо явно добавить sourceSets.main.kotlin.classesDirectories в sourceSets.main.outputs в вашем JAR-файле:

tasks.jar(type: Jar) {
     from sourceSets.main.outputs
     from sourceSets.main.kotlin.classesDirectories
}

Настройка для нескольких платформ

Проекты, настроенные для нескольких платформ, называемые проектами для нескольких платформ, требуют плагин kotlin-multiplatform. Узнайте больше о плагине.

Плагин kotlin-multiplatform работает с Gradle 6.8.3 и новее.

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

Узнайте больше о Kotlin Multiplatform для различных платформ и Kotlin Multiplatform для iOS и Android.

Настройка для Android

Для создания приложений для Android рекомендуется использовать Android Studio. Узнайте, как использовать плагин Android Gradle.

Настройка для JavaScript

При настройке для JavaScript также используйте плагин kotlin-multiplatform. Узнайте больше о настройке проекта Kotlin/JS

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

Kotlin и Java исходные файлы для JavaScript

Этот плагин работает только с Kotlin-файлами, поэтому рекомендуется хранить Kotlin и Java файлы раздельно (если в проекте есть Java файлы). Если вы не храните их раздельно, укажите папку с исходными файлами в блоке sourceSets:

kotlin {
    sourceSets["main"].apply {    
        kotlin.srcDir("src/main/myKotlin") 
    }
}
kotlin {
    sourceSets {
        main.kotlin.srcDirs += 'src/main/myKotlin'
    }
}

Вызов действий конфигурации с интерфейсом KotlinBasePlugin

Чтобы вызвать какое-либо действие конфигурации всякий раз, когда применяется любой плагин Kotlin для Gradle (JVM, JS, Multiplatform, Native и другие), используйте интерфейс KotlinBasePlugin, от которого наследуются все плагины Kotlin:

import org.jetbrains.kotlin.gradle.plugin.KotlinBasePlugin

// ...

project.plugins.withType<KotlinBasePlugin>() {
    // Configure your action here
}
import org.jetbrains.kotlin.gradle.plugin.KotlinBasePlugin

// ...

project.plugins.withType(KotlinBasePlugin.class) {
    // Configure your action here
}

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

Для добавления зависимости от библиотеки установите зависимость требуемого типа (например, implementation) в блоке dependencies DSL-набора исходных данных.

kotlin {
    sourceSets {
        val commonMain by getting {
            dependencies {
                implementation("com.example:my-library:1.0")
            }
        }
    }
}
kotlin {
    sourceSets {
        commonMain {
            dependencies {
                implementation 'com.example:my-library:1.0'
            }
        }
    }
}

В качестве альтернативы вы можете указать зависимости на верхнем уровне.

Типы зависимостей

Выберите тип зависимости в зависимости от ваших потребностей.

Тип

Описание

Когда использовать

api

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

Если любой тип из зависимости используется в общедоступном API текущего модуля, используйте зависимость api.

implementation

Используется во время компиляции и выполнения для текущего модуля, но не экспортируется для компиляции других модулей, зависящих от модуля с зависимостью `implementation`.

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

Если модуль является конечным приложением, которое не публикуется, используйте зависимости implementation вместо зависимостей api.

compileOnly

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

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

runtimeOnly

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

Зависимость от стандартной библиотеки

Зависимость от стандартной библиотеки (stdlib) автоматически добавляется к каждому набору исходных данных. Версия стандартной библиотеки совпадает с версией плагина Kotlin Gradle.

Для наборов исходных данных, специфичных для платформы, используется соответствующий вариант библиотеки, специфичный для платформы, а общая стандартная библиотека добавляется ко всем остальным. Плагин Kotlin Gradle выбирает соответствующую стандартную библиотеку JVM в зависимости от compilerOptions.jvmTarget параметра компилятора вашего скрипта Gradle.

Если вы явно объявляете зависимость от стандартной библиотеки (например, если вам нужна другая версия), плагин Kotlin Gradle не переопределит её и не добавит вторую стандартную библиотеку.

Если вам вообще не нужна стандартная библиотека, вы можете добавить опцию исключения в gradle.properties.

kotlin.stdlib.default.dependency=false

Выравнивание версий транзитивных зависимостей

Если вы явно указываете версию Kotlin 1.8.0 или выше в своих зависимостях, например: implementation("org.jetbrains.kotlin:kotlin-stdlib:1.8.0"), тогда плагин Kotlin Gradle использует эту версию Kotlin для транзитивных kotlin-stdlib-jdk7 и kotlin-stdlib-jdk8 зависимостей. Это сделано для предотвращения дублирования классов из разных версий stdlib. Узнайте больше о слиянии kotlin-stdlib-jdk7 и kotlin-stdlib-jdk8 в kotlin-stdlib. Вы можете отключить это поведение с помощью свойства Gradle kotlin.stdlib.jdk.variants.version.alignment:

kotlin.stdlib.jdk.variants.version.alignment=false
Другие способы выравнивания версий
  • В случае проблем с выравниванием версий, выровняйте все версии с помощью BOM Kotlin BOM. Укажите зависимость платформы от kotlin-bom в вашем скрипте сборки:

    implementation(platform("org.jetbrains.kotlin:kotlin-bom:1.9.0"))
    
    implementation platform('org.jetbrains.kotlin:kotlin-bom:1.9.0')
    

Указание зависимостей от библиотек тестирования

API kotlin.test доступен для тестирования проектов Kotlin на всех поддерживаемых платформах. Добавьте зависимость kotlin-test в commonTest набор исходных файлов, чтобы плагин Gradle мог определить соответствующие зависимости тестирования для каждого набора исходных файлов тестирования:

  • kotlin-test-common и kotlin-test-annotations-common для общих наборов исходных файлов

  • kotlin-test-junit для наборов исходных файлов JVM

  • kotlin-test-js для наборов исходных файлов Kotlin/JS

Для целей Kotlin/Native дополнительные зависимости тестирования не требуются, и реализации API kotlin.test встроенные.

kotlin {
    sourceSets {
        val commonTest by getting {
            dependencies {
                implementation(kotlin("test")) // This brings all the platform dependencies automatically
            }
        }
    }
}
kotlin {
    sourceSets {
        commonTest {
            dependencies {
                implementation kotlin("test") // This brings all the platform dependencies automatically
            }
        }
    }
}

Вы можете использовать сокращенную запись для зависимости от модуля Kotlin, например, kotlin("test") для "org.jetbrains.kotlin:kotlin-test".

Вы также можете использовать зависимость kotlin-test в любом общем или платформенно-специфическом наборе исходных файлов.

Для Kotlin/JVM Gradle по умолчанию использует JUnit 4. Поэтому зависимость kotlin("test") разрешается до варианта для JUnit 4, а именно kotlin-test-junit.

Вы можете выбрать JUnit 5 или TestNG, вызвав useJUnitPlatform() или useTestNG() в задаче тестирования вашего скрипта сборки. Следующий пример предназначен для проекта Kotlin Multiplatform:

kotlin {
    jvm {
        testRuns["test"].executionTask.configure {
            useJUnitPlatform()
        }
    }
    sourceSets {
        val commonTest by getting {
            dependencies {
                implementation(kotlin("test"))
            }
        }
    }
}
kotlin {
    jvm {
        testRuns["test"].executionTask.configure {
            useJUnitPlatform()
        }
    }
    sourceSets {
        commonTest {
            dependencies {
                implementation kotlin("test")
            }
        }
    }
}

Следующий пример предназначен для проекта JVM:

dependencies {
    testImplementation(kotlin("test"))
}

tasks {
    test {
        useTestNG()
    }
}
dependencies {
    testImplementation 'org.jetbrains.kotlin:kotlin-test'
}

test {
    useTestNG()
}

Узнайте, как тестировать код с помощью JUnit на JVM.

Если вам необходимо использовать другой фреймворк тестирования JVM, отключите автоматический выбор фреймворка тестирования, добавив строку kotlin.test.infer.jvm.variant=false в файл gradle.properties проекта. После этого добавьте фреймворк как зависимость Gradle.

Если вы явно использовали вариант kotlin("test") в своём скрипте сборки и сборка проекта перестала работать из-за конфликта совместимости, см. эту проблему в руководстве по совместимости.

Указание зависимости от библиотеки kotlinx

Если вы используете kotlinx библиотеку и вам нужна платформенно-специфичная зависимость, вы можете использовать платформенно-специфичные варианты библиотек с суффиксом, например, -jvm или -js, например, kotlinx-coroutines-core-jvm. Вы также можете использовать имя базового артефакта библиотеки — kotlinx-coroutines-core.

kotlin {
    sourceSets {
        val jvmMain by getting {
            dependencies {
                implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.7.1")
            }
        }
    }
}
kotlin {
    sourceSets {
        jvmMain {
            dependencies {
                implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.7.1'
            }
        }
    }
}

Если вы используете многоплатформенную библиотеку и вам нужно зависеть от общего кода, установите зависимость только один раз в общем наборе исходных файлов. Используйте имя базового артефакта библиотеки, например, kotlinx-coroutines-core или ktor-client-core.

kotlin {
    sourceSets {
        val commonMain by getting {
            dependencies {
                implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.1")
            }
        }
    }
}
kotlin {
    sourceSets {
        commonMain {
            dependencies {
                implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.1'
            }
        }
    }
}

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

В качестве альтернативы вы можете указать зависимости на верхнем уровне, используя следующий шаблон для имён конфигураций: <sourceSetName><DependencyType>. Это может быть полезно для некоторых встроенных зависимостей Gradle, таких как gradleApi(), localGroovy(), или gradleTestKit(), которые недоступны в DSL зависимостей наборов исходных файлов.

dependencies {
    "commonMainImplementation"("com.example:my-library:1.0")
}
dependencies {
    commonMainImplementation 'com.example:my-library:1.0'
}

Что дальше?

Узнайте больше о:

  • Параметры компилятора и способы их передачи.

  • Инкрементальная компиляция, поддержка кэшей, отчёты о сборке и демоны Kotlin.

  • Основы и особенности Gradle.

  • Поддержка вариантов плагинов Gradle.

Последнее изменение: 14 июля 2023 г.
Начало работы с Gradle и Kotlin/JVM Параметры компилятора в плагине Kotlin Gradle

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

Spec-Zone.ru

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