嗨 :) 我是 Kotlin 新手。我想在 Kotlin 临时文件中使用
kotlinx_serialization
。
Kotlin 发出错误:
The binary version of its metadata is 1.9.0, expected version is 1.7.1.
error: class 'kotlinx.serialization.ExperimentalSerializationApi' was compiled with an incompatible version of Kotlin. The binary version of its metadata is 1.9.0, expected version is 1.7.1.
The class is loaded from /Users/a202101054/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlinx/kotlinx-serialization-core-jvm/1.6.0/94b35f721f1029b3b8d46fb277b4e53fb1a0a510/kotlinx-serialization-core-jvm-1.6.0.jar!/kotlinx/serialization/ExperimentalSerializationApi.class
import kotlinx.serialization.ExperimentalSerializationApi
^
error: class 'kotlinx.serialization.Serializable' was compiled with an incompatible version of Kotlin. The binary version of its metadata is 1.9.0, expected version is 1.7.1.
The class is loaded from /Users/a202101054/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlinx/kotlinx-serialization-core-jvm/1.6.0/94b35f721f1029b3b8d46fb277b4e53fb1a0a510/kotlinx-serialization-core-jvm-1.6.0.jar!/kotlinx/serialization/Serializable.class
import kotlinx.serialization.Serializable
^
error: unresolved reference: encodeToString
import kotlinx.serialization.encodeToString
^
error: class 'kotlinx.serialization.json.Json' was compiled with an incompatible version of Kotlin. The binary version of its metadata is 1.9.0, expected version is 1.7.1.
The class is loaded from /Users/a202101054/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlinx/kotlinx-serialization-json-jvm/1.6.0/59761a941bd8691b3ef2447f5b9376868a6b2d7e/kotlinx-serialization-json-jvm-1.6.0.jar!/kotlinx/serialization/json/Json.class
import kotlinx.serialization.json.Json
^
error: class 'kotlinx.serialization.json.JsonNamingStrategy' was compiled with an incompatible version of Kotlin. The binary version of its metadata is 1.9.0, expected version is 1.7.1.
The class is loaded from /Users/a202101054/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlinx/kotlinx-serialization-json-jvm/1.6.0/59761a941bd8691b3ef2447f5b9376868a6b2d7e/kotlinx-serialization-json-jvm-1.6.0.jar!/kotlinx/serialization/json/JsonNamingStrategy.class
import kotlinx.serialization.json.JsonNamingStrategy
^
error: unresolved reference: ExperimentalSerializationApi
@OptIn(ExperimentalSerializationApi::class)
^
error: an annotation argument must be a compile-time constant
@OptIn(ExperimentalSerializationApi::class)
^
我的
build.gradle.tks
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
plugins {
id("org.springframework.boot") version "3.1.5"
id("io.spring.dependency-management") version "1.1.3"
id("com.diffplug.spotless") version "6.19.0"
kotlin("jvm") version "1.8.22"
kotlin("plugin.spring") version "1.8.22"
kotlin("plugin.jpa") version "1.8.22"
// json
kotlin("plugin.serialization") version "1.9.20"
}
group = "wesang.sample"
version = "0.0.1-SNAPSHOT"
java {
sourceCompatibility = JavaVersion.VERSION_17
}
spotless {
kotlin {
ktlint()
}
}
repositories {
mavenCentral()
}
dependencies {
implementation("org.springframework.boot:spring-boot-starter-actuator")
implementation("org.springframework.boot:spring-boot-starter-data-jpa")
implementation("org.springframework.boot:spring-boot-starter-validation")
implementation("org.springframework.boot:spring-boot-starter-web")
implementation("com.fasterxml.jackson.module:jackson-module-kotlin")
implementation("org.jetbrains.kotlin:kotlin-reflect")
// Mysql
runtimeOnly("com.mysql:mysql-connector-j")
implementation(platform("org.springframework.cloud:spring-cloud-dependencies:2022.0.4"))
implementation("org.springframework.cloud:spring-cloud-starter-openfeign")
implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.0")
// redis (lettuce)
implementation("org.springframework.boot:spring-boot-starter-data-redis")
developmentOnly("org.springframework.boot:spring-boot-devtools")
// runtimeOnly("io.micrometer:micrometer-registry-datadog")
testImplementation("org.springframework.boot:spring-boot-starter-test")
}
tasks.withType<KotlinCompile> {
kotlinOptions {
freeCompilerArgs += "-Xjsr305=strict"
jvmTarget = "17"
}
}
tasks.withType<Test> {
useJUnitPlatform()
}
和
gradle-wrapper.properties
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.4-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
你们能让我知道我做错了什么吗?我是新接触 Kotlin 的 Python 开发者🙏
来自 kotlinx.serialization GitHub 的自述文件:
Kotlin DSL
plugins {
kotlin("jvm") version "1.9.0"
kotlin("plugin.serialization") version "1.9.0"
}
还有
repositories {
mavenCentral()
}
dependencies {
implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.0")
}
将“jvm”和“plugin.serialization”更新到版本 1.9.0。
我从这里下载了一个基本的 Spring 项目。
然后我检查了我和你的所有文件,发现有一些差异。
我使用 IDE 中捆绑的
Kotlin
版本,也设置为 1.9
、Language version
和 API version
。另请注意,Target JVM version
是 1.8
。
在项目结构设置中,您可以看到两个
Kotlin
版本都设置为 1.8
这是我的
build.gradle.kts
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
plugins {
id("org.springframework.boot") version "3.1.5"
id("io.spring.dependency-management") version "1.1.3"
kotlin("jvm") version "1.8.22"
kotlin("plugin.spring") version "1.8.22"
}
group = "com.example"
version = "0.0.1-SNAPSHOT"
java {
sourceCompatibility = JavaVersion.VERSION_17
}
repositories {
mavenCentral()
}
dependencies {
implementation("org.springframework.boot:spring-boot-starter")
implementation("org.jetbrains.kotlin:kotlin-reflect")
testImplementation("org.springframework.boot:spring-boot-starter-test")
}
tasks.withType<KotlinCompile> {
kotlinOptions {
freeCompilerArgs += "-Xjsr305=strict"
jvmTarget = "17"
}
}
tasks.withType<Test> {
useJUnitPlatform()
}
tasks.bootBuildImage {
builder.set("paketobuildpacks/builder-jammy-base:latest")
}
这是
gradle-wrapper.properties
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.4-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
如果以上都不起作用,我会尝试直接从 initializr 或 IDEA 创建一个全新的 Spring 项目。