gradle - 如何在 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 中使用序列化吗?)
解决方案
最后,想通了。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
需要明确执行“构建项目”。
推荐阅读
- python - 尝试使用 SQLAlchemy 关系
- perl - 如何使用 Perl Digest::xxHash 计算文件的哈希值
- python - 如何使用分支运算符在 Airflow DAG 中分支多个路径?
- go - 多端口连接的 UDP 服务器问题
- java - 是否可以动态构造 jOOQ VALUES() 表?
- android-studio - 使用 Kotlin 在 Android Studio 上使用 Spinner 更改活动
- html - Jumbotron 固定图像跳转
- javascript - 未填写数组的特定起始值
- google-apps-script - 通过脚本启用复选框时如何用值替换公式。(谷歌表格)
- swiftui - 没有绑定的 SwiftUI 切换开关