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


478

尝试通过IntelliJ 运行Example CorDapp(https://github.com/corda/cordapp-example)时,出现以下错误:

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

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


5
通过将此库添加到build.gradle依赖项中,我能够解决此问题{compile(“ org.jetbrains.kotlin:kotlin-stdlib-jdk8”)}
Munish Chandel

1
@MunishChandel这还不够。我们还必须做以下答案所暗示的事情……
IgorGanapolsky

Answers:


1020

app / build.gradle

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

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

GL

使用Java 8语言功能


30
这应该是已检查的解决方案。
菲尔

9
到目前为止,在尝试了所有其他方法之后,这是唯一可行的解​​决方案。奇怪的是,在“设置”>“ Kotlin编译器”中设置相同的值无效。
user3399299

51
只要kotlinOptions { jvmTarget = "1.8" }就足够了。
彼得

2
工作,答案是不言而喻的,简洁明了
Vikas Pandey

4
然后应“使缓存无效并重新启动”
B-GangsteR

213

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

  • 打开IntelliJ首选项
  • 转到Build, Execution, Deployment> Compiler> Kotlin Compiler Other Settings > Kotlin compilerAndroid是否工作室>3.4
  • 更改Target JVM version1.8
  • 请点击 Apply

6
我已经将此设置固定为1.8,但是在单步执行断点时仍会看到此错误。我在打库查询时主要看到了这一点。还有其他建议吗?看来此目标JVM位不能完全解决它。
Arsalan Khalid

38
在“ 项目结构”上,确保同时在选项卡下的Facet 上将JVM 1.8更改Target platformJVM 1.8KotlinGeneral
Anyul Rivas

7
如果存在未解决的依赖关系,则会出现此错误!
programaths

5
对我来说,Kotlin Compiler设置实际上放在了Other Settings部分中。
qwertyfinger19年

9
如果应用后重启还不够,请执行以下操作→重新启动和使缓存无效。
鲍尔泰克利平斯基

104

您应该在build.gradle中配置如下所示的内容

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

14
或者,在Gradle Kotlin DSL中:tasks.withType<org.jetbrains.kotlin.gradle.tasks.KotlinCompile> { kotlinOptions.jvmTarget = "1.8" }
breandan

任何想法如何使它与kotlin-android插件一起使用?
ZeroDivide

无需太多麻烦。我会推荐它
米奇(Mitch)

我在build.gradle中有此设置,但是IDEA以某种方式覆盖了此设置。赛义德的回答为我工作。
nils petersohn

请将其添加到应用程序级Gradle的android {}部分中。
Parag Kadam's 19-10-4

80

就我而言,只是像这样更改目标JVM版本:“文件”>“设置”>“ Kotlin编译器”>“目标JVM版本”> 1.8并没有帮助。但是,它确实解决了编译时错误。但是在运行时失败。

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

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

2
很有魅力。谢谢
dave o grady

作品!谢谢
Waldmann

55

如果其他解决方案对您不起作用(在Compiler设置上更改JVM版本并添加jvmTarget到中build.gradle),由于.iml文件试图强制其配置,则可以从Project Settings中更改目标平台。

  • 打开 File > Project Structure
  • 转到FacetsProject Settings
    • 如果为空,则单击小+按钮
  • 点击您的Kotlin模块
  • 更改Target PlatformJVM 1.8(也最好检查Use project settings选项)

3
我在Android Studio中找不到此内容或“构面”部分...🤔我必须手动编辑app.iml。我将<configuration version="3" platform="JVM 1.8" useProjectSettings="false">true和它的工作。但是,文件不断变回来!
Aphex

1
@Aphex实际上在“文件”>“项目结构”下,然后在“项目设置”>“ Facets”下,我什么都没有,所以我喜欢“ +”>“ Kotlin”>选择我的项目。那对我有用:)
Nicolas Guillaume

这对我有用,但是每次我添加到build.gradle.kts文件时都被强制回1.6。
Lou Morda

有没有办法从gradle文件中进行配置和配置?恕我直言,此配置错误是intellij中的错误。
吉尔·范古普(Jilles van Gurp)

35

在我的情况下,直到我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"
    }
}

kotlinOptions {jvmTarget =“ 1.8”} Didi给我的把戏,thx
Didi

32

在Android Studio 4.3.2中,无法通过以下过程进行添加。

  1. 打开IntelliJ首选项
  2. 转到构建,执行,部署 > 编译器 > Kotlin编译器但如果Android Studio> 3.4,则其他设置> Kotlin编译器
  3. 目标JVM版本更改为1.8
  4. 点击应用

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

kotlinOptions {
    jvmTarget = "1.8"
}

仅针对插件,在android studio搜索中搜索Target JVM版本。您将直接进入该选项。 在此处输入图片说明


仅通过手动添加,它对我有用。由于某些原因,android studio确实存在问题,除非我们通过删除所有缓存重新启动ide,否则它不会考虑应用的更改。
卡兰·沙尔玛


26

2020年2月
android 3.4+
转到文件->设置-> Kotlin编译器->目标JVM版本>设置为1.8,然后确保执行文件->用Gradle文件同步项目,

或将其添加到build.gradle(module:app)android块中:

kotlinOptions {
           jvmTarget = "1.8"
         }

只是“用摇篮同步项目文件”对我的作品..
阿卡什Bisariya

确认您需要使用Gradle文件执行File-> Sync project,然后就可以了
Irfandi D. Vendy


19

如果您有许多源集/模块,则为每个源集/模块分别配置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给所有Kotlin模块。它看起来应该像这样:

项目结构

建议直接在IntelliJ中更改平台,因为其他任何人第一次克隆您的项目都可能会遇到相同的问题。在gradle中正确配置它的优点是IntelliJ将从一开始就对它们正确运行。


16

就我而言,我按照以下两个步骤解决了这个问题

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"
        }
    }

嘿,谢谢您的回答,我必须执行第二步及其工作。您能解释为什么需要它吗?
hushed_voice

您可以在这个封闭的问题上找到更多详细信息,很高兴知道[ github.com/mikepenz/Android-Iconics/issues/454]
Vikas Sharma

该链接已死
hushed_voice

12

对我来说,原因是我的构建gradle中的此配置位于某些模块中,而在某些模块中则不是

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

1
谢谢,这是唯一对我有用的解决方案。我正在使用kts建筑物文件。
克拉姆斯,

谢谢,这也是对我有用的解决方案。这种方式更具说明性。 stackoverflow.com/a/57041765/3763032凯文(Kevin)也指出了这一点,因为可直接在kotlin gradle文件.kts中进行智能广播
mochadwi

12

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

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

为什么我们需要转换thisKotlinJvmOptionsthis接收器还不是在kotlinOptions街区KotlinJvmOptions吗?如果没有演员,这对我来说仍然行不通
19m19

1
@ 11m0,我认为它与此问题有关:github.com/gradle/kotlin-dsl-samples/issues/1368
HDW

如果找不到KotlinJvmOptions,请尝试使用全名“ org.jetbrains.kotlin.gradle.dsl.KotlinJvmOptions”。
HDW

4

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

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

如果您已声明自定义Gradle任务integrationTest(例如),请为compile<YourTaskName>Kotlin

compileIntegrationTestKotlin {
    kotlinOptions.jvmTarget = "1.8"
}

这也可以通过添加到gradle文件中来实现-> compileOptions {sourceCompatibility = 1.8 targetCompatibility = 1.8} kotlinOptions {jvmTarget =“ 1.8”}
Sanket Patel

有趣的是,只有您的解决方案可以与我的非Android模块配合使用!谢谢!
Mohammad Omidvar

4

设置sourceCompatibility = JavaVersion.VERSION_1_8可启用除糖功能,但目前无法对Kotlin编译器使用的所有Java 8功能进行除糖。

在此处输入图片说明

修复- kotlinOptions.jvmTarget to JavaVersion.VERSION_1_8在应用模块Gradle中进行设置将解决此问题。

使用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"
  }
}

3

这里所有的答案都在使用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的jetbrains原型更改为<configuration></configuration>指定jvmTarget。就我而言11


3

在我更新Kotlin插件依赖项之前,对我没有任何帮助。
请尝试以下操作:
1.使cahce无效并重新启动。
2.同步项目(至少尝试同步)
3.转到文件 -> 项目结构 -> 建议
4.如果有关于Kotlin的更新,请对其进行更新。
希望它能帮助某人。


最简单的解决方法
u84six

2

如果使用带有Kotlin扩展名的Visual Studio Code **,请转到插件管理Crtl + Shift + x,键入kotlin并单击管理(小工具)>>配置扩展名设置

在Kotlin >>编译器>> Jvm:Target上-键入Java版本。我的情况是输入1.8

然后重新启动:-)

** vscode或仅针对Linux的“代码”


2

在我的情况下,文件>设置> Kotlin编译器>目标JVM版本> 1.8


2

我使用Kotlin和Gradle进行正常的JVM开发(而不是android),这在以下方面对我有用build.gradle

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

1

如果您使用Eclipse并假设您已下载Kotlin插件:

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


1

对于最新版本的Android Studio,如果仅更改Kotlin Target VM版本不起作用。

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


1

如果您在android项目中

在您的应用的android {}下的build.gradle中

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"
    }
}

1

使用Kotlin Gradle DSL,这为我解决了这个问题。我将此添加到build.gradle.kts。这是乔尔的回答

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

1
您能在文件中确切分享您的位置吗?您正在使用哪个版本的android插件和gradle?
treesAreEverywhere

这不是一个Android项目。我正在运行Gradle 6.4。
Briantical

0

给Eclipse用户的另一个提示。仔细检查其他用户指出的jvm目标设置后,我仍然遇到相同的问题,这是由于缺少Kotlin Runtime Library引起的。例如,当使用spring initializr创建项目时,不会自动添加该项目。要添加:right click on your project -> Build path -> Add libraries... -> User Library,只需添加org.jetbrains.kotlin.core.KOTLIN_CONTAINER

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


0

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

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

0

就我而言,jvmTarget已在build.gradle文件中设置如下。

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

但是我的问题仍然存在。最后,在“首选项”>“其他设置”>“ Kotlin编译器”>“目标JVM版本”中将目标JVM版本从1.6更改为1.8之后,该问题得以解决。见附图,

在此处输入图片说明

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.