无法将使用JVM目标1.8构建的字节码内联到使用JVM目标1.6构建的字节码中

尝试通过IntelliJ运行示例CorDapp(github cordapp)时,我收到以下错误:

无法将使用JVM目标1.8构建的字节码内联到字节码中 使用JVM目标1.6构建

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

219908 次浏览

您可以通过以下方式解决此问题:

  • 打开IntelliJ首选项
  • 转到Build, Execution, Deployment>Compiler>Kotlin Compiler但是Other Settings>Kotlin compiler如果Android Studio>3.4
  • Target JVM version更改为1.8
  • 点击Apply

正如静态编程语言网站上的使用权限文档所写:

您只需将<kotlin.compiler.jvmTarget>1.8</kotlin.compiler.jvmTarget>放入pom.xml的属性部分

您应该在build.gradle中配置如下

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

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

  • 打开File > Project Structure
  • 转到Project Settings下的Facets
    • 如果它是空的,则单击小+按钮
  • 单击静态编程语言模块
  • Target Platform更改为JVM 1.8(最好选中Use project settings选项)

如果您使用Eclipse,假设您下载了静态编程语言插件:

右键单击项目->属性->静态编程语言编译器->启用项目特定设置->JVM目标版本“1.8”

对我来说,原因是我的构建gradle中的这种配置存在于某些模块中,而在某些模块中则没有

android {
...
kotlinOptions {
val options = this as KotlinJvmOptions
options.jvmTarget = "1.8"
}
...
android {

APP/build.gradle

android {
...
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}


kotlinOptions {
jvmTarget = JavaVersion.VERSION_1_8.toString()
}
}

GL

使用Java8种语言功能

对于使用静态编程语言的Gradle(*.gradle.kts文件),添加以下内容:

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

在Android Studio 4.3.2中,通过以下过程添加不起作用。

  1. 打开IntelliJ首选项
  2. 转到构建、执行、部署>编译器>静态编程语言编译器但其他设置>静态编程语言编译器,如果Android Studio>3.4
  3. 目标JVM版本更改为1.8
  4. 点击申请

原因是Android Studio无法在模块级Gradle文件中添加以下代码。请手动添加。

kotlinOptions {
jvmTarget = "1.8"
}

只是为了插件,在android工作室搜索中搜索目标JVM版本。它会直接带你到选项。 输入图片描述

如果使用带有静态编程语言扩展的Visual Studio Code**,请转到插件管理Crtl+Shift+x,键入kotlin并单击管理(小齿轮)>>配置扩展设置

在静态编程语言>>编译器>>Jvm:目标-键入java版本。在我的情况下,只键入1.8

然后重新启动:-)

**vscode或只是linux的“代码”

在我的例子中,我通过以下两个步骤解决了这个问题

1. Go to android studio preferences -> other settings -> kotlin compiler -> set Target JVM version = 1.8
if it doesn't work then go to the second option.


2. In your module-level build.gradle file add
compileOptions {
sourceCompatibility = 1.8
targetCompatibility = 1.8
}
tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).all {
kotlinOptions {
jvmTarget = "1.8"
}
}

在我的情况下文件>设置>静态编程语言编译器>目标JVM版本>1.8

对于最新版本的Android Studio,如果仅更改静态编程语言Target VM版本则不起作用。

文件项目结构模块(app):将“源代码兼容性”和“目标兼容性”设置为“1.8(Java8)”。按“确定”并将项目与Gradle同步。

在我的情况下,只是像这样更改目标JVM版本:文件>设置>静态编程语言编译器>目标JVM版本>1.8没有帮助。但是,它确实解决了编译时错误。但在运行时失败。

我还必须在应用程序build.gradle文件中添加以下内容才能使其正常工作。

 android {
// Other code here...
kotlinOptions {
jvmTarget = "1.8"
}
}

在大多数情况下,这就足够了:

compileKotlin {
kotlinOptions.jvmTarget = "1.8"
}
compileTestKotlin {
kotlinOptions.jvmTarget = "1.8"
}

如果您已经声明了像integrationTest这样的自定义Gradle任务,请为compile<YourTaskName>Kotlin添加配置:

compileIntegrationTestKotlin {
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>

kotlin-jvm的jetBrain原型的变化是<configuration></configuration>指定jvmTarget。在我的案例中11

2020年2
android3.4+
转到文件->设置->静态编程语言编译器->目标JVM版本>设置为1.8,然后确保执行文件->与Gradle文件同步项目

或者将其添加到android块中的build.gradle(模块:应用)中:

kotlinOptions {
jvmTarget = "1.8"
}

设置sourceCompatibility = JavaVersion.VERSION_1_8启用脱色,但目前无法脱色静态编程语言编译器使用的所有Java8功能。

在此处输入图片描述

修复-在应用程序模块Gradle中设置kotlinOptions.jvmTarget to JavaVersion.VERSION_1_8将修复该问题。

使用Java8种语言特性: 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"
}
}

给Eclipse用户的另一个提示。在仔细检查了其他用户指出的jvm目标设置后,我仍然有同样的问题,那是由于缺少静态编程语言运行时库造成的。例如,当使用Spring初始化器创建项目时,它不是自动添加的。对于添加它:right click on your project -> Build path -> Add libraries... -> User Library,只需添加org.jetbrains.kotlin.core.KOTLIN_CONTAINER

确保之后刷新您的gradle项目(right click -> Gradle -> Refresh gradle project

在我的例子中,直到我将apply plugin: 'kotlin-android'从下到上移动,这段代码才起作用。

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'


android {
...
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}


kotlinOptions {
jvmTarget = "1.8"
}
}

在我更新我的kotlin插件依赖项之前,没有什么对我有用。
试试这个:
1.使cahce无效并重新启动。
2.同步项目(至少尝试一下)
3.转到文件->项目结构->建议
4.如果有关于静态编程语言的更新,请更新它。 希望能帮到大家

如果您有许多源集/模块,为每个源集/模块单独配置jvmTarget可能会很麻烦。

您可以一次为所有这些配置jvmTarget,如下所示:

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

此代码段可用于gradle.build文件的顶层

修改gradle文件Reimport All Gradle Imports后。 要检查它是否有效,请打开Project Structure并验证IntelliJ是否正确地将JVM 1.8分配给所有静态编程语言模块。

项目结构

我建议没有直接在IntelliJ中更改平台,因为第一次克隆您的项目的任何人都可能面临同样的问题。在gradle中正确配置它具有IntelliJ从一开始就为他们正确行为的优势。

如果您在Spring Boot/静态编程语言项目中遇到此消息,只需在pom.xml.中将属性“kotlin.compiler.jvmTarget”设置为“1.8”

    <properties>
<kotlin.version>1.3.70</kotlin.version>
<kotlin.compiler.jvmTarget>1.8</kotlin.compiler.jvmTarget>
</properties>
...

我使用静态编程语言和Gradle进行正常的JVM开发(不是android),这在build.gradle中为我工作:

allprojects {
tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).configureEach {
kotlinOptions.jvmTarget = JavaVersion.VERSION_11.toString()
}
}

如果你在安卓项目中

应用程序的build.gradle 在android下{}

android{
//other configs...
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
kotlinOptions {
jvmTarget = "1.8"
}
}

使用静态编程语言Gradle DSL,这为我解决了这个问题。我将其添加到build.gradle.kts. 这是对乔尔答案的补充

val compileKotlin: KotlinCompile by tasks
compileKotlin.kotlinOptions.jvmTarget = JavaVersion.VERSION_1_8.toString()

在我的情况下,jvmTarget已经在build.gradle文件中设置如下。

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

我的问题还在。 最后,将目标JVM版本从1.6更改为1.8后,在首选项>其他设置>静态编程语言编译器>目标JVM版本中得到解决。

在此处输入图片描述

请将此代码添加到您的应用程序/build.gradle中的Android部分

compileOptions {
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
}
kotlinOptions {
jvmTarget = JavaVersion.VERSION_1_8
}

您可能需要同时设置compileKotlincompileTestKotlin。 这适用于gradle 6.5.1。

compileKotlin {
kotlinOptions {
languageVersion = "1.2"
apiVersion = "1.2"
jvmTarget = "1.8"
javaParameters = true   // Useful for reflection.
}
}


compileTestKotlin {
kotlinOptions {
languageVersion = "1.2"
apiVersion = "1.2"
jvmTarget = "1.8"
javaParameters = true   // Useful for reflection.
}
}

下一个解决方案帮助了我。添加到build.gradle

 compileKotlin {
kotlinOptions.jvmTarget = "1.8"
}


compileTestKotlin {
kotlinOptions.jvmTarget = "1.8"
}

这有助于我的项目构建,将其添加到模块build.gradle文件中:

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

如果上述答案都不起作用,您可以在kotlin dsl中执行此操作

android {
...


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

只需在build.gradle模块中添加此代码kotlinOptions { jvmTarget = '1.8' }

我做了所有的步骤,但没有成功的问题是

implementation 'org.jetbrains.kotlin:kotlin-stdlib:1.4.32'

当我更新到

implementation 'org.jetbrains.kotlin:kotlin-stdlib:1.5.30'

显示出这个问题当我回到

implementation 'org.jetbrains.kotlin:kotlin-stdlib:1.4.32'

问题固定

对我来说,从implementation 'org.jetbrains.kotlin:kotlin-stdlib:1.5.30'implementation 'org.jetbrains.kotlin:kotlin-stdlib:1.4.32'都很有效

我通过导航到gradle.build文件并更新kotlin插件的版本来修复此问题。

对我来说,最初的配置是:

plugins {
id 'org.jetbrains.kotlin.android' version '1.6.10' apply false
}

所以我将插件的版本更改为最新版本:

plugins {
id 'org.jetbrains.kotlin.android' version '1.7.10' apply false
}