当试图通过IntelliJ运行示例CorDapp (GitHub CorDapp)时,我收到以下错误:

不能将使用JVM目标1.8构建的字节码内联为当前的字节码 使用JVM目标1.6构建

如何修改IntelliJ设置,使所有字节码都使用相同的JVM目标构建?


当前回答

如果以上答案都无效,您可以在kotlin dsl中执行此操作

android {
...

    tasks.withType<org.jetbrains.kotlin.gradle.tasks.KotlinCompile> {
        kotlinOptions {
            jvmTarget = "1.8"
        }
    }
}

其他回答

设置sourceCompatibility = javaverse。VERSION_1_8启用了糖化,但它目前无法糖化Kotlin编译器使用的所有Java 8特性。

修复-设置kotlinOptions。jvmTarget到javaverse。应用模块Gradle中的VERSION_1_8会修复这个问题。

使用Java 8语言特性: https://developer.android.com/studio/write/java8-support

android {
  ...
  // Configure only for each module that uses Java 8
  // language features (either in its source code or
  // through dependencies).
  compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
  }
  // For Kotlin projects
  kotlinOptions {
    jvmTarget = "1.8"
  }
}

如果您有很多源集/模块,那么为每个源集/模块分别配置jvmTarget会很麻烦。

你可以为所有这些对象一次性配置jvmTarget,如下所示:

tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).all {
    kotlinOptions {
        jvmTarget = "1.8"
    }
}

这个片段可以用在你的gradle的顶层。构建文件

修改gradle文件后,重新导入所有gradle导入。 要检查它是否工作,请打开Project Structure并验证IntelliJ是否正确地将JVM 1.8分配给所有Kotlin-Modules。它应该是这样的:

我不建议直接在IntelliJ中更改平台,因为任何第一次克隆您的项目的人都可能面临同样的问题。在gradle中正确配置它的好处是,IntelliJ从一开始就能正确地为它们工作。

当其他解决方案不适合你时(在编译器设置上更改JVM版本并将jvmTarget添加到build.gradle中),因为你的.iml文件试图强制它们的配置,你可以从项目设置中更改目标平台。

打开文件>项目结构 进入项目设置下的Facets 如果它是空的,然后点击小的+按钮 单击您的Kotlin模块/模块 将目标平台更改为JVM 1.8(同时最好检查使用项目设置选项)

正如在Kotlin网站的using-maven文档中所写的:

你只需要把<kotlin.compiler.jvmTarget>1.8</kotlin.compiler.jvmTarget>放到pom.xml的属性部分

对于Kotlin语言的Gradle (*. Gradle。KTS文件),添加这个:

android {
    [...]
    kotlinOptions {
        this as KotlinJvmOptions
        jvmTarget = "1.8"
    }
}