我正在尝试使用 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 似乎并没有责怪。
我读了很多类似的问题,但找不到对我有用的答案。谁能解释一下我的情况吗?
我能够解决警告“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")
}