如何在IntelliJ/Kotlin中设置序列化?

6

非常抱歉问个新手问题:我正在尝试了解 Kotlin 中序列化的工作原理。

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

enter image description here

然后编辑生成的 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'

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


很惊讶在过去的六个月里没有其他人回答。谢谢,你的答案对我有用。 - Karan Sharma
看起来他们现在已经在https://kotlinlang.org/docs/serialization.html#example-json-serialization中进行了更正。 - aaronvargas
1个回答

9

终于想通了。 IntelliJ IDEA 中的一个错误 一直阻碍着我的故障排除。

为了留下答案给通过谷歌搜索到这个问题的任何人:

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 文件中执行 "Run",这导致了另一个错误。

error: unable to evaluate script, no scripting plugin loaded

由于一个令人头疼的bug(我的意思是,我浪费了数个小时试图找出我做错了什么),https://youtrack.jetbrains.com/issue/KT-37814

需要显式地执行“构建项目”。


如果这个方法不起作用,这是我成功的方法。从应用插件中删除 kotlin("plugin.serialization") version。构建项目,重新添加它并再次构建项目。我认为这只是一个 IntelliJ 的 bug。 - Dr BigKitkat

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接