【问题标题】:Kotlin @Serializable annotation not working in IntelliJKotlin @Serializable 注释在 IntelliJ 中不起作用
【发布时间】:2019-08-29 01:28:39
【问题描述】:

我正在尝试在 Kotlin 中使用 @Serializable 注释。我可以使用 Gradle 构建项目,但它在 IntelliJ 中显示为红色,当我将鼠标悬停在 @Serializable 注释上时,有一条消息说:

 kotlinx.serializable compiler plugin is not applied to the module, so this
 annotation would not be processed. Make sure you've setup your buildscript
 correctly and re-import project.

我的build.gradle.kts 文件如下所示:

plugins {
    id("org.jetbrains.kotlin.jvm").version("1.3.50")
    id("org.jetbrains.kotlin.plugin.serialization") version "1.3.50"
    idea
}

repositories {
    jcenter()
}

dependencies {
    implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
    implementation(group = "com.charleskorn.kaml", name = "kaml", version = "0.12.0")

    testImplementation("org.jetbrains.kotlin:kotlin-test")
    testImplementation("org.jetbrains.kotlin:kotlin-test-junit")
}

我安装了最新版本的 Kotlin 插件 (1.3.50)。

【问题讨论】:

  • 刚刚检查了您的配置 - 一切正常。尝试刷新 Gradle(在 IDE 中),或/并重新启动 IDE。
  • 嗯,你有哪个版本的 IntelliJ?具体来说,这段代码是红色的:DataClassWithSerializableAnnotation.serializer()
  • 另外,如何将项目“导入”到 IntelliJ 中?我运行./gradlew idea,然后打开生成的项目。
  • IntelliJ idea Ultimate 2019.2 EAP。我刚刚创建了新项目并将 build.gradle 替换为 *.kts
  • 嘿@MaxFarsikov,我得到了这个工作。诀窍是通过打开build.gradle.kts 文件而不是运行./gradlew idea 来导入项目。感谢您的帮助!

标签: intellij-idea kotlin


【解决方案1】:

你需要添加:

plugins {
    application
    kotlin("jvm") version "1.4.21"
    kotlin("plugin.serialization") version "1.4.21"
}

这是 JetBrains 在这里指定的,链接到 gradle:

https://github.com/Kotlin/kotlinx.serialization#setup

https://ktor.io/docs/kotlin-serialization.html#add_dependencies

【讨论】:

    【解决方案2】:

    所以我得到了这个工作。问题是我使用idea 插件来生成 IntelliJ 项目。当我通过打开 build.gradle.kts 文件导入项目时,一切都按预期工作。

    我之所以没有这样导入它是因为我禁用了 Gradle 支持,所以当我打开 build.gradle.kts 文件时,它没有导入项目,它只是在编辑器中打开它.如果您遇到这种情况,请点击cmd+shift+a 并搜索Gradle,然后将该开关切换到On。重新启动 IntelliJ 后,您应该能够从 build.gradle.kts 文件导入项目,并且一切顺利。

    【讨论】:

      【解决方案3】:

      就我而言,maintest 目录在 IntelliJ 中不再是“模块”。不知道发生了什么...

      您可以前往menu -> File -> Project Structure... 验证这一点

      modules 左侧导航下,maintest 应该是父应用下的模块。如果没有,最简单的修复方法是

      • 关闭您的项目
      • 删除 .idea 和 .gradle 目录
      • 选择 Menu -> File -> New project from existing source... 并导入为 gradle 项目

      否则,您也可以通过转到上面显示的Project structure... 重新创建您的模块。然后在你的父应用下+ New Module,然后选择Java,并选中Kotlin作为模块类型。对maintest 目录执行此操作(确保您的目录在后者中标记为“测试”源目录)

      【讨论】:

        【解决方案4】:

        您是否尝试过转到文件 -> 使缓存无效?

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-06-06
          • 1970-01-01
          • 2020-02-02
          • 2018-02-22
          相关资源
          最近更新 更多