Kotlin 序列化插件不会在 Gradle 项目中生成序列化器

问题描述 投票:0回答:1

我正在尝试使用 Kotlinx Serialization 库和相关的 Gradle 插件。当我用

@Serializable
注释一个类时,它应该生成序列化器,如下所示:

@Serializable
data class Message(val version: String)

// (...)

Json.encodeToString(Message("1.0"))

不起作用,注释突出显示为:

kotlinx.serialization 编译器插件未应用于该模块,因此 该注释将不会被处理。确保您已设置 正确构建脚本并重新导入项目。

正如预期的那样,代码无法编译,因为我希望进一步使用序列化器,并出现错误:

类型不匹配:推断类型是 Message,但是 序列化策略是预期的

这是我的应用程序级别

build.gradle

plugins {
    id "java"
    id 'org.jetbrains.kotlin.jvm' version '1.6.10'
    id 'org.jetbrains.kotlin.plugin.serialization' version '1.6.10'
}

kotlin {
    jvmToolchain {
        languageVersion.set(JavaLanguageVersion.of(11))
    }
}

dependencies {
    implementation "com.amazonaws:aws-lambda-java-core:$lambda_runtime_version"
    implementation "software.amazon.awssdk:dynamodb-enhanced:$aws_sdk_version"
    implementation "org.jetbrains.kotlinx:kotlinx-serialization-json:$kotlin_serialization_version"
    implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
}

task fatJar(type: Jar) {
    archiveClassifier = 'lambdaCode'
    duplicatesStrategy = DuplicatesStrategy.WARN
    from sourceSets.main.output
    dependsOn configurations.runtimeClasspath
    from {
        configurations.runtimeClasspath.findAll { it.name.endsWith('jar') }.collect { zipTree(it) }
    }
}

我正在使用 Gradle 7.3.3,并在 IntelliJ 中查看这一切。我尝试从命令行启动

gradle build
,得到类似的结果,因此 IDE 似乎并没有责怪。

我读了很多类似的问题,但找不到对我有用的答案。谁能解释一下我的情况吗?

kotlin gradle gradle-plugin kotlinx.serialization
1个回答
0
投票

我能够解决警告“kotlinx.serialization 编译器插件未应用于模块,因此不会处理此注释。请确保您已正确设置构建脚本并重新导入项目。”通过在 project 级 build.gradle.kts 中添加序列化插件,然后将其应用到 module 级 build.gradle.kts 中。

项目build.gradle.kts:

plugins {
    ...    
    kotlin("plugin.serialization") version "1.9.0" apply false
}

模块build.gradle.kts:

plugins {
    ...
    kotlin("plugin.serialization")
}
...
dependencies {
    ...
    implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.0")
}
© www.soinside.com 2019 - 2024. All rights reserved.