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

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

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


当前回答

在我的例子中,只是像这样更改目标JVM版本:File > Setting > Kotlin Compiler > Target JVM Version > 1.8并没有帮助。但是,它解决了编译时错误。但在运行时失败。

我还必须在应用程序构建中添加以下内容。Gradle文件使它工作。

 android {
     // Other code here...
     kotlinOptions {
        jvmTarget = "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"
    }
}

如果您有很多源集/模块,那么为每个源集/模块分别配置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从一开始就能正确地为它们工作。

2020年2月 android 3.4 + 去文件->设置-> Kotlin编译器->目标JVM版本>设置为1.8,然后确保做文件->同步项目与Gradle文件 或者将此添加到android block中的build.gradle(module:app):

kotlinOptions {
           jvmTarget = "1.8"
         }

这里所有的答案都是使用gradle,但如果有人像我这样结束在这里,需要回答maven:

    <build>
        <sourceDirectory>src/main/kotlin</sourceDirectory>
        <testSourceDirectory>src/test/kotlin</testSourceDirectory>

        <plugins>
            <plugin>
                <groupId>org.jetbrains.kotlin</groupId>
                <artifactId>kotlin-maven-plugin</artifactId>
                <version>${kotlin.version}</version>
                <executions>
                    <execution>
                        <id>compile</id>
                        <phase>compile</phase>
                        <goals>
                            <goal>compile</goal>
                        </goals>
                    </execution>
                    <execution>
                        <id>test-compile</id>
                        <phase>test-compile</phase>
                        <goals>
                            <goal>test-compile</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <jvmTarget>11</jvmTarget>
                </configuration>
            </plugin>
        </plugins>
    </build>

从jetbrains原型到kotlin-jvm的变化是<configuration></configuration>指定jvmTarget。就我而言