首页 > 解决方案 > 如何在 IntelliJ/Kotlin 中设置序列化?

问题描述

对于一个菜鸟问题,我深表歉意:我正在尝试检查 Kotlin 中的序列化是如何工作的。

为此,我创建了一个这样的 Gradle 项目:

在此处输入图像描述

build.gradle.kts通过仅添加一行来编辑生成的

plugins {
    java
    kotlin("jvm") version "1.3.71"
    id("org.jetbrains.kotlin.plugin.serialization") version "1.3.71"
}

group = "org.example"
version = "1.0-SNAPSHOT"

repositories {
    mavenCentral()
}

dependencies {
    implementation(kotlin("stdlib-jdk8"))
    testCompile("junit", "junit", "4.12")
}

configure<JavaPluginConvention> {
    sourceCompatibility = JavaVersion.VERSION_1_8
}
tasks {
    compileKotlin {
        kotlinOptions.jvmTarget = "1.8"
    }
    compileTestKotlin {
        kotlinOptions.jvmTarget = "1.8"
    }
}

并创建了这个 Kotlin 源文件:

import kotlinx.serialization.*
import kotlinx.serialization.json.*

@Serializable
data class Data(val a: Int, val b: String = "42")

但是当我构建这个项目时,我得到了这个错误:

Unresolved reference: kotlinx

如果我删除前两行违规行,则会收到此错误:

Cannot access 'Serializable': it is internal in 'kotlin.io'

我在这里做错了什么?(另外,我需要 Gradle 在 IntelliJ/Kotlin 1.3.71 中使用序列化吗?)

标签: gradlekotlinintellij-idea

解决方案


最后,想通了。IntelliJ IDEA 中的一个BUG阻碍了我的故障排除。

为任何可能通过 Google 找到此问题的人留下答案:

build.gradle.kt需要是

plugins {
    java
    kotlin("jvm") version "1.3.71"
    kotlin("plugin.serialization") version "1.3.71"
}

repositories {
    // artifacts are published to JCenter
    jcenter()
}

dependencies {
    implementation(kotlin("stdlib", org.jetbrains.kotlin.config.KotlinCompilerVersion.VERSION))
    implementation("org.jetbrains.kotlinx:kotlinx-serialization-runtime:0.20.0")
}

官方说明有一个错误的版本:没有org.jetbrains.kotlin.config.

然而,这还不够。我正在从 Kotlin 文件中执行“运行”。这导致另一个错误

error: unable to evaluate script, no scripting plugin loaded

由于一个讨厌的错误(例如,我浪费了几个小时试图弄清楚我做错了什么)https://youtrack.jetbrains.com/issue/KT-37814

需要明确执行“构建项目”。


推荐阅读