714

When trying to run the Example CorDapp (GitHub CorDapp) via IntelliJ, I receive the following error:

Cannot inline bytecode built with JVM target 1.8 into bytecode that is being built with JVM target 1.6

How can I modify the IntelliJ settings so that all the bytecode is built with the same JVM target?

iknow
  • 4,796
  • 9
  • 19
  • 37
Joel
  • 24,072
  • 6
  • 20
  • 37
  • 7
    I was able to resolve this issue by adding this library to `build.gradle` dependencies { compile("org.jetbrains.kotlin:kotlin-stdlib-jdk8") } – Munish Chandel Oct 30 '18 at 15:44
  • 2
    @MunishChandel That is not sufficient. We must also do what the answer below suggests... – IgorGanapolsky Sep 06 '19 at 14:17
  • Had the same error when specifying jvmTarget = "15" on Linux but the same project was working on Windows, both on IntelliJ 2020.3. Changed to jvmTarget = "14" and it worked on both. In either case there were no errors from the command line, only in IntelliJ. – AlexO Dec 02 '20 at 21:07

32 Answers32

1483

app/build.gradle

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

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

GL

Use Java 8 language features

Braian Coronel
  • 17,823
  • 4
  • 30
  • 33
282

You can fix this issue as follows:

  • Open the IntelliJ preferences
  • Go to Build, Execution, Deployment > Compiler > Kotlin Compiler BUT Other Settings > Kotlin compiler if Android Studio > 3.4
  • Change the Target JVM version to 1.8
  • Click Apply
erluxman
  • 13,712
  • 15
  • 67
  • 99
Joel
  • 24,072
  • 6
  • 20
  • 37
  • 8
    I have this setting fixed to 1.8 already, yet I still see this error when stepping through breakpoints. I primarily see this when hitting vault queries. Any further suggestions? It seems this target JVM bit doesn't fix it entirely. – Arsalan Khalid Mar 25 '18 at 15:59
  • 45
    On your **Project Structure**, make sure you also change the `Target platform` to **JVM 1.8** on your `Kotlin` Facet under the `General` tab. – Anyul Rivas Jul 27 '18 at 12:43
  • 1
    Would you know the instructions to do the same on eclipse? – Abhi Jan 12 '19 at 20:14
  • 3
    And after Apply restart IDE. – Pavel Shorokhov Feb 10 '19 at 15:42
  • 8
    This error can appear if there is an **unresolved dependency**! – programaths Feb 14 '19 at 08:42
  • 8
    For me the `Kotlin Compiler` settings were actually placed in `Other Settings` section. – qwertyfinger Jul 03 '19 at 13:12
  • 13
    If restarting after apply is not enough → Restart & Invalidate caches. – Bartek Lipinski Aug 04 '19 at 19:40
  • 5
    Unfortunately that doesn't work if you have multiple modules. In that case you need to add ``` kotlinOptions { jvmTarget = "1.8" } ``` for every gradle in a module – Alessandro Mautone Sep 11 '19 at 10:47
  • 1
    This answer worked for me: https://stackoverflow.com/a/57586653/5046642 – Princeps Polycap Nov 21 '19 at 20:20
  • You should go to Kotlin Compiler – Elias Fazel Dec 31 '19 at 03:07
  • kotlinOptions { jvmTarget = "1.8" } – Rob Feb 05 '20 at 13:15
  • I do not see `General` Tab or `Build, Execution, Deployment` on Android Studio though. – c-an Mar 21 '20 at 05:57
  • 1
    As others have said, it was already set to 1.8 in the settings. Adding `kotlinOptions { jvmTarget = "1.8" } ` in the build.gradle (Module: app) fixed it. – Damn Vegetables Apr 19 '20 at 12:42
  • 1
    Doesn't work for me. Solved my problem with `kotlinOptions` – Andrey Turkovsky Apr 28 '20 at 09:59
  • The above did not help me. I had to add the below to Module gradle.build file: ` tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).all { sourceCompatibility = JavaVersion.VERSION_1_8 targetCompatibility = JavaVersion.VERSION_1_8 kotlinOptions { jvmTarget = '1.8' apiVersion = '1.1' languageVersion = '1.1' } } ` from here: https://stackoverflow.com/questions/44141076/compilekotlin-block-in-build-gradle-file-throws-error-could-not-find-method-com – matua Jul 22 '20 at 14:38
139

you should configure something like as follows in build.gradle

tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).all {
    kotlinOptions {
        jvmTarget = "1.8"
    }
}
Amuthan
  • 1,507
  • 3
  • 11
  • 12
110

please add this code to android section inside your app/build.gradle

compileOptions {
        sourceCompatibility = JavaVersion.VERSION_1_8
        targetCompatibility = JavaVersion.VERSION_1_8
    }
    kotlinOptions {
        jvmTarget = JavaVersion.VERSION_1_8
    }
D. Sergeev
  • 1,916
  • 1
  • 9
  • 14
  • 1
    its working great can you please explain it, why we need to do this and whats its mean. – Shubham Tater Jul 04 '20 at 15:13
  • 1
    it works, when my destination fragment was not able to accept navArgs() and was complaining about inline bytecode built. My app gradle had compile options for source and target but i didnt have kotlinOptions. After i added Kotlin options and clean PRoject> Rebuild Project. worked fine. – Antroid Sep 27 '20 at 00:32
  • It doesn't differ from the top answer. – CoolMind Nov 06 '20 at 16:15
88

In my case, just changingTarget JVM Version like this: File > Setting > Kotlin Compiler > Target JVM Version > 1.8 did not help. However, it does resolved compile time error. But failed at runtime.

I also had to add following in app build.gradle file to make it work.

 android {
     // Other code here...
     kotlinOptions {
        jvmTarget = "1.8"
     }
 }
ZX9
  • 707
  • 1
  • 12
  • 30
63

When the other solutions did not work for you (Changing JVM version on Compiler settings and adding jvmTarget into your build.gradle), because of your .iml files trying to force their configurations you can change the target platform from Project Settings.

  • Open File > Project Structure
  • Go to Facets under Project Settings
    • If it is empty then click on the small + button
  • Click on your Kotlin module/modules
  • Change the Target Platform to JVM 1.8 (also it's better to check Use project settings option)
Orposuser
  • 161
  • 2
  • 9
Saeed Masoumi
  • 8,797
  • 6
  • 53
  • 71
  • 3
    I can't find this or the 'facets' section in Android Studio... I had to edit the app.iml manually. I set `````` to `true` and it worked. However, the file keeps changing back! – Aphex Dec 05 '18 at 22:36
  • 1
    @Aphex It's actually under "File" > "Project Structure" then under "Project Settings" > "Facets", I had nothing there, so I cliked "+" > "Kotlin" > Select my project. That did it for me :) – Nicolas Guillaume Feb 04 '19 at 19:05
  • 1
    This works for me, but being forced back to 1.6 every time I add to my build.gradle.kts file. – Lou Morda Feb 13 '19 at 16:29
  • Is there a way to have this configured and picked up from the gradle file? IMHO this being misconfigured is a bug in intellij. – Jilles van Gurp Mar 12 '19 at 14:19
44

In my case this code didn't work until I moved apply plugin: 'kotlin-android' from bottom to top.

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"
    }
}
Zoe
  • 23,712
  • 16
  • 99
  • 132
Ara Badalyan
  • 1,304
  • 1
  • 12
  • 20
33

In Android Studio 4.3.2 adding through the below procedure is not working.

  1. Open the IntelliJ preferences
  2. Go to Build, Execution, Deployment > Compiler > Kotlin Compiler BUT Other Settings > Kotlin compiler if Android Studio > 3.4
  3. Change the Target JVM version to 1.8
  4. Click Apply

The reason is, Android studio is unable to add the below code in the module level Gradle file. Please add it manually.

kotlinOptions {
    jvmTarget = "1.8"
}

Just for the addon, search Target JVM version in the android studio search. It will take you directly to the option. enter image description here

Muhammad Maqsood
  • 1,209
  • 14
  • 16
  • only by adding manually, it worked for me. For some reason, android studio is really buggy and it does not consider changes applied unless we restart the ide by deleting all cache. – Karan Sharma Feb 20 '20 at 11:51
  • Tnx, your solution worked for me, although I needed to restart android studio to make it reconfigure project! – Reyhane Farshbaf Dec 10 '20 at 19:24
28

Feb 2020
android 3.4+
Go to File -> Settings -> Kotlin Compiler -> Target JVM Version > set to 1.8 and then make sure to do File -> Sync project with Gradle files

Or add this into build.gradle(module:app) in android block:

kotlinOptions {
           jvmTarget = "1.8"
         }
USMAN osman
  • 647
  • 4
  • 11
23

As it is written in the using-maven docs from the Kotlin website:

You just have to put <kotlin.compiler.jvmTarget>1.8</kotlin.compiler.jvmTarget> into the properties section of your pom.xml

Johan Vergeer
  • 4,153
  • 7
  • 36
  • 81
22

If you have many sourcesets/modules it can be cumbersome to configure the jvmTarget for each of them separately.

You can configure the jvmTarget for all of them at once like so:

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

This snippet can be used on top level of your gradle.build file

After modifying the gradle file Reimport All Gradle Imports. To check if it worked, open Project Structure and verify that IntelliJ correctly assigned JVM 1.8 to all Kotlin-Modules. It should look like this:

project structure

I would not recommend changing the platform directly in IntelliJ, because anyone else cloning your project for the first time is likely to face the same issue. Configuring it correctly in gradle has the advantage that IntelliJ is going to behave correctly for them right from the start.

Fabian Braun
  • 2,304
  • 1
  • 26
  • 37
20

In my case, jvmTarget was already set in build.gradle file as below.

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

But my issue was still there. Finally, it gets resolved after Changing Target JVM version from 1.6 to 1.8 in Preferences > Other Settings > Kotlin Compiler > Target JVM version. see attached picture,

enter image description here

Shoaib Mushtaq
  • 480
  • 4
  • 10
19

This helped my project to build, add this to module build.gradle file:

compileOptions {
        sourceCompatibility 1.8
        targetCompatibility 1.8
    }
    tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).all {
        kotlinOptions {
            jvmTarget = "1.8"
        }
    }
Costa
  • 431
  • 4
  • 6
16

In my case, I solved this by following these two steps

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"
        }
    }
Vikas Sharma
  • 435
  • 6
  • 10
15

For me the reason was this configuration in my build gradle was in some modules and in some it wasnt

android {  
...      
kotlinOptions {
        val options = this as KotlinJvmOptions
        options.jvmTarget = "1.8"
    }
...
android {
AdrianoCelentano
  • 1,982
  • 3
  • 27
  • 40
  • 1
    Thanks, this was the only solution that worked for me. I am using kts buiild files. – Krames Jul 11 '19 at 19:47
  • Thanks, this is also the solutions that worked for me. And much declarative this way. https://stackoverflow.com/a/57041765/3763032 kevin also stated this, due to the smartcast in kotlin gradle files .kts it is available directly – mochadwi Aug 22 '19 at 17:13
12

For Gradle with Kotlin language (*.gradle.kts files), add this:

android {
    [...]
    kotlinOptions {
        this as KotlinJvmOptions
        jvmTarget = "1.8"
    }
}
Kevin Robatel
  • 6,623
  • 3
  • 37
  • 54
  • Why do we need to cast `this` to `KotlinJvmOptions`. Isn't the `this` receiver in the `kotlinOptions` block already `KotlinJvmOptions`? Still it doesn't work for me without the cast – 11m0 Oct 25 '19 at 21:20
  • 1
    @11m0, I think it's related to this issue: https://github.com/gradle/kotlin-dsl-samples/issues/1368 – HDW Jan 02 '20 at 14:21
  • When KotlinJvmOptions is not found, try using the full name "org.jetbrains.kotlin.gradle.dsl.KotlinJvmOptions". – HDW Jan 02 '20 at 14:28
10

The next solution helped me. Add to build.gradle

 compileKotlin {
    kotlinOptions.jvmTarget = "1.8"
}

compileTestKotlin {
    kotlinOptions.jvmTarget = "1.8"
}
8

in most cases this is enough:

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

if you have declared custom Gradle tasks like integrationTest for example, add a configuration for compile<YourTaskName>Kotlin as well:

compileIntegrationTestKotlin {
    kotlinOptions.jvmTarget = "1.8"
}
naXa
  • 26,677
  • 15
  • 154
  • 213
  • this would work too by adding to gradle file --> compileOptions { sourceCompatibility = 1.8 targetCompatibility = 1.8 } kotlinOptions { jvmTarget = "1.8" } – Sanket Patel Jan 18 '20 at 05:25
  • interestingly, only your solution worked with my non-android module! thanks! – momt99 Apr 12 '20 at 16:31
7

Setting sourceCompatibility = JavaVersion.VERSION_1_8 enables desugaring, but it is currently unable to desugar all the Java 8 features that the Kotlin compiler uses.

enter image description here

Fix - Setting kotlinOptions.jvmTarget to JavaVersion.VERSION_1_8 in the app module Gradle would fix the issue.

Use Java 8 language features: 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"
  }
}
Anoop M Maddasseri
  • 8,060
  • 3
  • 40
  • 61
6

All answers here are using gradle but if someone like me ends up here and needs answer for 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>

The change from jetbrains archetype for kotlin-jvm is the <configuration></configuration> specifying the jvmTarget. In my case 11

mattie
  • 71
  • 1
  • 1
6

if you are in android project

in your app's build.gradle under 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"
    }
}
ironman
  • 139
  • 2
  • 3
6

You may need to set both compileKotlin and compileTestKotlin. This works on 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.
    }
}
kigawas
  • 547
  • 5
  • 18
4

Nothing worked for me until I updated my kotlin plugin dependency.
Try this:
1. Invalidate cahce and restart.
2. Sync project (at least try to)
3. Go File -> Project Structure -> Suggestions
4. If there is an update regarding Kotlin, update it.
Hope it will help someone.

Waldmann
  • 679
  • 4
  • 19
4

I'm using Kotlin and Gradle for normal JVM development, (not android) and this worked for me in build.gradle:

allprojects {
    tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).configureEach {
        kotlinOptions.jvmTarget = JavaVersion.VERSION_11.toString()
    }
}
Peter V. Mørch
  • 9,433
  • 5
  • 46
  • 65
4

Using the Kotlin Gradle DSL, this solved the issue for me. I added this to the build.gradle.kts. This is in addition to the answer by Joel

val compileKotlin: KotlinCompile by tasks
compileKotlin.kotlinOptions.jvmTarget = JavaVersion.VERSION_1_8.toString()
Briantical
  • 71
  • 1
  • 5
4

If non of the above answers works, you can do this in kotlin dsl

android {
...

    tasks.withType<org.jetbrains.kotlin.gradle.tasks.KotlinCompile> {
        kotlinOptions {
            jvmTarget = "1.8"
        }
    }
}
Amin Bahiraei
  • 462
  • 8
  • 18
3

If using Visual Studio Code** with Kotlin extension, go to the plugin management Crtl + Shift + x, type kotlin and click on manage (the little gear) >> Configure Extension Settings

on Kotlin >> Compiler >> Jvm:Target - type the java version. In my situation just typed 1.8

And then restart :-)

** vscode or just 'code' for linux

Hinotori
  • 413
  • 5
  • 10
2

If you use Eclipse assuming you downloaded the Kotlin plugin:

Right click project -> Properties -> Kotlin Compiler -> Enable project specific settings -> JVM target version "1.8"

Invest
  • 460
  • 6
  • 8
2

In my case File > Setting > Kotlin Compiler > Target JVM Version > 1.8

Bills
  • 633
  • 5
  • 14
1

For recent versions of Android Studio, if changing just the Kotlin Target VM version didn't work.

File ➞ Project Structure ➞ Modules (app): set both "Source Compatibility" and "Target Compatibility" to "1.8 (Java 8)". Press "OK" and sync project with Gradle.

ZzZombo
  • 930
  • 10
  • 23
1

If you'r facing this message in a Spring Boot/Kotlin project, just set the property "kotlin.compiler.jvmTarget" to "1.8" in your pom.xml.

    <properties>
        <kotlin.version>1.3.70</kotlin.version>
        <kotlin.compiler.jvmTarget>1.8</kotlin.compiler.jvmTarget>
    </properties>
    ...
ed3d
  • 63
  • 7
0

Another hint for Eclipse users. After double checking the jvm target settings pointed out by other users, I still had the same problem, and that was caused by missing Kotlin Runtime Library. For eg, when creating a project with spring initializr, it is not added automatically. For adding it: right click on your project -> Build path -> Add libraries... -> User Library, and simply add org.jetbrains.kotlin.core.KOTLIN_CONTAINER

Make sure you refresh your gradle project afterwards (right click -> Gradle -> Refresh gradle project)

malaquf
  • 21
  • 2