【问题标题】:How to set '-Xuse-experimental=kotlin.experimental' in IntelliJ如何在 IntelliJ 中设置“-Xuse-experimental=kotlin.experimental”
【发布时间】:2019-05-16 04:27:52
【问题描述】:

尝试在 IntelliJ 中构建 Kotlin/Ktor 应用程序时,出现多个表单警告

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

是输出。警告指的是

@UseExperimental(KtorExperimentalLocationsAPI::class)

所以我希望通过将 Settings -> Build -> Compiler -> Kotlin Compiler -> Additional command line parameters 设置为 -version -Xuse-experimental=kotlin.Experimental 来满足警告。 (-version 已经存在)。但是仍然会产生警告。我如何满足它?期待中的感谢。

【问题讨论】:

  • 你应该按照提示,尝试使用@UnstableDefault

标签: intellij-idea kotlin compiler-warnings ktor


【解决方案1】:

您的项目使用的是 Maven 还是 Gradle?我在使用 Gradle 时遇到了同样的问题,但我可以通过将 -Xuse-experimental=kotlin.Experimental 放入我的 build.gradle 文件中的tasks.withType

对于 KtorExperimentalLocationsAPI,您可以尝试:

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

【讨论】:

  • 如果我们使用大量的实验性功能怎么样?例如:UnstableDefaultImplicitSerialization。论证会是这样吗? kotlinOptions.freeCompilerArgs += ["-Xuse-experimental=io.ktor.locations.KtorExperimentalLocationsAPI, UnstableDefault, Implicit, etc"]
  • 更新了我上面的评论:当使用多个参数时,你可以这样做:kotlinOptions.freeCompilerArgs += [ "-Xuse-experimental=io.ktor.locations.KtorExperimentalLocationsAPI", "-Xuse-experimental=kotlinx.serialization.UnstableDefault", "-Xuse-experimental=kotlinx.serialization.ImplicitSerialization"]
【解决方案2】:

在当前的 Kotlin 版本(1.5)中,您可以通过添加@OptIn 注解来使用任何实验库

@OptIn(ExperimentalCoroutinesApi::class)

但是,选择加入机制本身是实验性的,要使用它,您需要添加一个编译器参数。在 Kotlin Multiplatform 中最惯用的方法是:

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

【讨论】:

  • languageSettings.useExperimentalAnnotation() 最近已被 languageSettings.optIn() 取代
【解决方案3】:

编辑 Graddle 6.5.1Ktor 1.3.2。 @jay-janez 的回答是这样的:

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

【讨论】:

    【解决方案4】:

    老问题,但有一些变化。

    -Xuse-experimental 已替换为 -Xopt-inSee the docs.

    对于 Grade Kotlin DSL,您也可以使用以下语法:

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

    【讨论】:

    • 获取Could not get unknown property 'withType' for task set of type。我猜我添加的地方是错误的,或者随着新版本的 Gradle 发生了变化。
    【解决方案5】:

    转到您的app/build.gradle 文件并在底部添加以下任务

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-01
      • 2018-09-07
      • 2016-10-16
      • 2015-03-28
      相关资源
      最近更新 更多