Kotlin 临时文件似乎使用与主应用程序不同的 Kotlin 版本

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

我想做的事

嗨 :) 我是 Kotlin 新手。我想在 Kotlin 临时文件中使用

kotlinx_serialization

我的环境

  • IntelliJ IDEA:构建#IU-223.8214.52
  • JDK 17(特木林)
  • Spring Boot 3.1.5
  • macOS 文图拉

实际发生了什么

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 开发者🙏

kotlin intellij-idea jetbrains-ide
1个回答
0
投票

来自 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 项目。

© www.soinside.com 2019 - 2024. All rights reserved.