Как установить '-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"
]
}