Kotlin 序列化:“未解析的参考:序列化器”

jin*_*ngx 14 serialization kotlin

我正在尝试 Kotlin 序列化。按照说明进行设置后,我收到Unresolved reference: serializer以下代码的构建错误:

val serializer : KSerializer<User> = User.serializer()
Run Code Online (Sandbox Code Playgroud)

我猜测编译器插件不知何故没有启动,但看不到我在设置中错过的内容。

这是我的build.gradle.kts

buildscript {
    val kotlinVer: String by extra("1.3.20")
    repositories { jcenter() }

    dependencies {
        classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVer")
        classpath("org.jetbrains.kotlin:kotlin-serialization:$kotlinVer")
    }
}

plugins {
    id("org.jetbrains.kotlin.jvm").version("1.3.20")

    application

    "kotlin"
    "kotlinx-serialization"
}

repositories {
    jcenter()
    maven("https://kotlin.bintray.com/kotlinx")
}

dependencies {
    implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
    compile("org.jetbrains.kotlinx:kotlinx-serialization-runtime:0.10.0")

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

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

application {
    mainClassName = "com.digizen.AppKt"
}
Run Code Online (Sandbox Code Playgroud)

Ale*_*nov 5

在 中plugins,您不能像以前那样只输入字符串,选项是 (for .kts)

\n\n
plugins {\n    `\xc2\xabplugin id\xc2\xbb`                                             // (1)\n    id(\xc2\xabplugin id\xc2\xbb)                                           // (2)\n    id(\xc2\xabplugin id\xc2\xbb) version \xc2\xabplugin version\xc2\xbb [apply \xc2\xabfalse\xc2\xbb]  // (3)\n} \n
Run Code Online (Sandbox Code Playgroud)\n\n

我认为 Kotlin 插件本身被激活是因为id("org.jetbrains.kotlin.jvm").version("1.3.20"),而不是因为"kotlin"

\n\n

自述文件说

\n\n
\n

Gradle(带有插件块)

\n\n

您可以使用 Gradle 插件 DSL 而不是传统的应用插件来通过 kotlin 插件设置序列化插件:

\n\n
plugins {\n    id \'kotlin-multiplatform\' version \'1.3.20\'\n    id \'kotlinx-serialization\' version \'1.3.20\'\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

在这种情况下,由于序列化插件尚未发布到 Gradle 插件门户,您需要将插件解析规则添加到您的 settings.gradle 中:

\n\n
pluginManagement {\n    resolutionStrategy {\n        eachPlugin {\n            if (requested.id.id == "kotlin-multiplatform") {\n                useModule("org.jetbrains.kotlin:kotlin-gradle-plugin:${requested.version}")\n            }\n            if (requested.id.id == "kotlinx-serialization") {\n                useModule("org.jetbrains.kotlin:kotlin-serialization:${requested.version}")\n            }\n        }\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

不要忘记从构建脚本依赖项中删除插件的类路径依赖项,否则,您将收到有关版本冲突的错误。

\n
\n\n

所以最小的改变就是从中删除两个字符串plugins块中删除两个字符串并\nadd

\n\n
apply plugin: \'kotlinx-serialization\'\n
Run Code Online (Sandbox Code Playgroud)\n\n

反而。

\n