当前位置: 首页 > 知识库问答 >
问题:

Kotlin:不能将用JVM目标1.8构建的字节码内联到用JVM目标1.6构建的字节码中

姜德泽
2023-03-14

我在尝试向我的kotlin spring项目添加一些依赖项时遇到了一个问题。我使用Spring Boot初始化器来运行一个基本项目。

我的问题:如果我取消对jackson或Koin依赖项的注释,那么我的构建就会失败,在titile中提到了build.gradle.kts文件,这里是build.gradle.kts:

    import org.jetbrains.kotlin.gradle.tasks.KotlinCompile

plugins {
    kotlin("plugin.jpa") version "1.3.31"
    id("org.springframework.boot") version "2.2.0.M4"
    id("io.spring.dependency-management") version "1.0.7.RELEASE"
    kotlin("jvm") version "1.3.31"
    kotlin("plugin.spring") version "1.3.31"
}

group = "com.example"
version = "0.0.1-SNAPSHOT"
java.sourceCompatibility = JavaVersion.VERSION_1_8

val developmentOnly by configurations.creating
configurations {
    runtimeClasspath {
        extendsFrom(developmentOnly)
    }
}

repositories {
    mavenCentral()
    maven { url = uri("https://repo.spring.io/snapshot") }
    maven { url = uri("https://repo.spring.io/milestone") }
}

dependencies {
    implementation("org.springframework.boot:spring-boot-starter-data-jpa")
    implementation("org.springframework.boot:spring-boot-starter-thymeleaf")
    implementation("org.springframework.boot:spring-boot-starter-web")
    implementation("com.fasterxml.jackson.module:jackson-module-kotlin")
    implementation("org.jetbrains.kotlin:kotlin-reflect")
    implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
    developmentOnly("org.springframework.boot:spring-boot-devtools")
    runtimeOnly("com.h2database:h2")
    testImplementation("org.springframework.boot:spring-boot-starter-test") {
        exclude(group = "org.junit.vintage", module = "junit-vintage-engine")
        exclude(group = "junit", module = "junit")
    }

    // jackson
    //implementation("com.fasterxml.jackson.module:jackson-module-kotlin:2.9.+")

    // Koin
    //implementation("org.koin:koin-core:2.0.1")

    // Koin Test
    //implementation("org.koin:koin-test:2.0.1")
}

tasks.withType<Test> {
    useJUnitPlatform()
}

tasks.withType<KotlinCompile> {
    kotlinOptions {
        freeCompilerArgs = listOf("-Xjsr305=strict")
        jvmTarget = "1.8"
    }
}

我已经有了KotlinCompile jvmTarget选项,并且在我的构建设置中也进行了设置。感谢任何帮助!

共有1个答案

籍辰沛
2023-03-14

很多答案都是android特有的--使用kotlin编写一个spring boot应用程序并不是很好的文档记录或支持,但仍然很棒。intelij中的这个设置为我清除了这个错误--希望它对某人有所帮助,我的kotlin编译器将目标设置为1.6:

 类似资料:
  • 当试图通过IntelliJ运行示例CorDapp(GitHub CorDapp)时,我收到以下错误: 无法将用JVM目标1.8构建的字节码内联到正在用JVM目标1.6构建的字节码中 如何修改IntelliJ设置,使所有字节码都是用相同的JVM目标构建的?

  • 我正在与Kotlin和Dagger 2开发一个Android项目。我有一个,它应该提供一个改造的单一实例。我在其中定义了所有这些提供程序函数。 以下所有代码段都在中: 正如您在我的build.gradle中所看到的,我已经声明了构建目标是JVM1.8。为什么我还是会犯这个错误?

  • 当我导入此接口并尝试调用方法时,它将失败,并出现以下错误: 我已经创建了一个intellij kotlin应用程序,它的工作是正确的。是新Kotlin gradle插件的bug吗?

  • 对于我目前正在进行的一个项目,IntelliJ给了我编译错误。我进入Settings>Build,Execution,Deployment>Compiler>Java,看到我的一个模块的目标字节码版本被设置为1.5,所以我将它更改为1.8并进行编译,结果它工作了。但第二天,我又犯了同样的错误。我进入设置,这个模块的目标字节码回到了1.5。我把它改成了1.8,它编译/运行得很好。这种情况现在已经发生

  • 本文向大家介绍Java字节码中jvm实例用法,包括了Java字节码中jvm实例用法的使用技巧和注意事项,需要的朋友参考一下 要想使Java运行,我们可以设计一个面向Java语言特性的虚拟机,并通过编译器将Java程序转换为它可以识别的指令序列,也称为Java字节码。由于Java字节码指令的操作码被固定为一个字节,所以它的名字就这样命名了。本篇要带来的是Java字节码中jvm的使用,主要分为两个操作

  • OKHTTP4.0.0是否有意与jvm目标1.6不兼容?从OKHTTP3.12.0升级到4.0.0,我遇到以下构建失败。 在进一步的检查中,我发现根本原因是接口有一个静态方法(伴侣对象中的函数)。升级指南没有提到这种向后不兼容,这让我认为这是无意的。