Как установить '-Xuse-экспериментальный =kotlin.experimental' в IntelliJ

При попытке создать приложение Kotlin/Ktor в IntelliJ, несколько предупреждений вида

Warning:(276, 6) Kotlin: This class can only be used with the compiler argument '-Xuse-experimental=kotlin.Experimental'

выводятся. Предупреждения относятся к

@UseExperimental(KtorExperimentalLocationsAPI::class)

поэтому я ожидал, что предупреждение будет удовлетворено, установив Настройки -> Сборка -> Компилятор -> Компилятор Kotlin -> Дополнительные параметры командной строки для -version -Xuse-экспериментальный = kotlin.Experimental. (-версия уже была там). Но предупреждение все еще генерируется. Как мне это удовлетворить? Спасибо в ожидании.

7 ответов

Вы используете Maven или Gradle для своего проекта? У меня была та же проблема с Gradle, но я смог удалить предупреждения, поместив -Xuse-экспериментальный =kotlin.Experimental в мой файл build.gradle, в файл tasks.withType.

Для KtorExperimentalLocationsAPI вы можете попробовать:

tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).all {
    kotlinOptions.freeCompilerArgs += ["-Xuse-experimental=io.ktor.locations.KtorExperimentalLocationsAPI"]
}

В текущей версии Kotlin (1.5) вы можете использовать любую экспериментальную библиотеку, добавив аннотацию @OptIn.

      @OptIn(ExperimentalCoroutinesApi::class)

Однако механизм согласия сам по себе является экспериментальным, и для его использования вам потребуется добавить аргумент компилятора. Самый идиоматический способ сделать это в Kotlin Multiplatform:

      kotlin.sourceSets.all {
    languageSettings.useExperimentalAnnotation("kotlin.RequiresOptIn")
}

В build.gradle.kts

В основном на мультиплатформенных проектах

      tasks.withType<org.jetbrains.kotlin.gradle.tasks.KotlinCompile> {
    kotlinOptions{
        kotlin.sourceSets.all {
            languageSettings.optIn("kotlin.RequiresOptIn")
        }
    }
}

Единая платформа

      tasks.withType<org.jetbrains.kotlin.gradle.tasks.KotlinCompile> {
    kotlinOptions {
        // ...
        freeCompilerArgs += "-opt-in=kotlin.RequiresOptIn"
    }
}

Редактировать для Graddle 6.5.1 и Ktor 1.3.2. Ответ @jay-janez выглядит так:

tasks.withType(KotlinCompile::class).all {
    kotlinOptions.freeCompilerArgs += "-Xuse-experimental=io.ktor.util.KtorExperimentalAPI"
}

Перейти к вашей app/build.gradleфайл и добавьте указанную ниже задачу в нижнюю часть

      tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).configureEach {
    kotlinOptions {
        freeCompilerArgs += "-Xopt-in=io.ktor.util.KtorExperimentalAPI"
    }
}

Старый вопрос, но есть некоторые изменения.

-Xuse-experimental был заменен -Xopt-in. См. Документы .

Также для Grade Kotlin DSL вы можете использовать этот синтаксис:

      tasks.withType<KotlinCompile> {
    kotlinOptions.freeCompilerArgs = listOf(
        "-Xopt-in=io.ktor.util.KtorExperimentalAPI"
    )
}

Вы можете добавить аргумент компилятора -opt-in=kotlin.RequiresOptIn в сборку

        kotlinOptions {
        freeCompilerArgs += [
                "-Xopt-in=kotlin.RequiresOptIn"
        ]
    }
Другие вопросы по тегам