775

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
  • 8,358
  • 12
  • 41
  • 68
Joel
  • 22,762
  • 5
  • 26
  • 41
  • 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

37 Answers37

1539

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
  • 22,105
  • 4
  • 57
  • 62
  • 9
    As of this date and Android Studio v3.5 this is the only solution that worked, after trying all the rest. Strangely enough setting the same value in Settings > Kotlin Compiler has no effect. – user3399299 Sep 28 '19 at 06:58
  • 111
    Just the `kotlinOptions { jvmTarget = "1.8" }` should suffice. – petter Nov 04 '19 at 11:33
  • @petter Some libraries need both options such as `okhttp3:logging-interceptor` to use `OkHttpClient.Builder().addInterceptor` – Braian Coronel Nov 05 '19 at 16:38
  • kotlinOptions { jvmTarget = "1.8" } – Rob Feb 05 '20 at 13:14
  • 9
    Then should "invalidate cache and restart" – B-GangsteR Feb 22 '20 at 17:12
  • 1
    I had already define the compileOption but not kotlinOption after define kotlinOption error gone. Its work for me. Thanks for sharing. – Hitesh Dhamshaniya Mar 17 '20 at 04:48
  • 3
    And what if this is not for android? Where do the `compileOptions` and `kotlinOptions` go? – Peter V. Mørch May 14 '20 at 10:54
  • @PeterV.Mørch What context are you referring to? – Braian Coronel May 14 '20 at 20:14
  • Why some people wrap this kotlinOptions { } inside a tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).all { } ? – Leonardo Sibela Jul 31 '20 at 12:59
  • @LeonardoSibela In Gradle is that everything is executed against a Interface Project instance. These are tasks executed in the global instance of gradle, that is, at the level of the project module. So this configuration loses sense modularization since it configures all the existing build.gradle in the project. – Braian Coronel Jul 31 '20 at 14:23
  • If you're trying to inline 1.8 bytecode in another Gradle module, you should also put this code in another module too (not just `app`) – Vadim Kotov Oct 06 '20 at 16:02
  • Of course, the scope of the gradle is for the module unless you run tasks on the global gradle instance. – Braian Coronel Oct 06 '20 at 17:06
303

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
  • 18,155
  • 20
  • 92
  • 126
Joel
  • 22,762
  • 5
  • 26
  • 41
  • 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
  • 49
    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
  • 9
    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
  • 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
  • 2
    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` – Andrii Turkovskyi 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
151

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,635
  • 3
  • 12
  • 12
121

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
  • 2,285
  • 1
  • 13
  • 16
  • 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
  • 2
    It doesn't differ from the top answer. – CoolMind Nov 06 '20 at 16:15
90

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
  • 898
  • 2
  • 16
  • 34
65

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
  • 311
  • 3
  • 9
Saeed Masoumi
  • 8,746
  • 7
  • 57
  • 76
  • 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
63

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
  • 27,060
  • 21
  • 118
  • 148
Ara Badalyan
  • 1,616
  • 1
  • 15
  • 20
34

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,622
  • 19
  • 25
  • 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
29

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
  • 952
  • 7
  • 13
27

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
  • 3,612
  • 1
  • 27
  • 44
24

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
  • 5,208
  • 10
  • 48
  • 105
23

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
  • 595
  • 4
  • 17
21

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
  • 472
  • 4
  • 6
17

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
  • 2,461
  • 3
  • 31
  • 42
  • 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
17

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
  • 685
  • 8
  • 18
13

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

android {
    [...]
    kotlinOptions {
        this as KotlinJvmOptions
        jvmTarget = "1.8"
    }
}
Kevin Robatel
  • 8,025
  • 3
  • 44
  • 57
  • 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
13

The next solution helped me. Add to build.gradle

 compileKotlin {
    kotlinOptions.jvmTarget = "1.8"
}

compileTestKotlin {
    kotlinOptions.jvmTarget = "1.8"
}
9

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 stands with Ukraine
  • 35,493
  • 19
  • 190
  • 259
  • 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! – momvart Apr 12 '20 at 16:31
9

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
  • 101
  • 1
  • 1
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
  • 10,213
  • 3
  • 52
  • 73
7

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
  • 1,153
  • 14
  • 27
6

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
  • 13,830
  • 8
  • 69
  • 103
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
  • 179
  • 2
  • 5
6

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 Bahiraee
  • 538
  • 10
  • 20
6

I did all steps but didn't success the problem was

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

when I updated to

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

shows that problem when I back to

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

the problem fixed

Vadik Sirekanyan
  • 3,332
  • 1
  • 22
  • 29
  • After rebuilding my project it states with this error message "This version (1.0.3) of the Compose Compiler requires Kotlin version 1.5.30 but you appear to be using Kotlin version 1.4.32 which is not known to be compatible. Please fix your configuration (or `suppressKotlinVersionCompatibilityCheck` but don't say I didn't warn you!)." – Piyush Johnson Oct 22 '21 at 03:46
5

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
  • 101
  • 1
  • 4
  • 5
4

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
  • 552
  • 6
  • 15
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
  • 1,563
  • 12
  • 25
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
  • 545
  • 6
  • 9
2

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

Bills
  • 768
  • 7
  • 19
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
  • 1,082
  • 1
  • 11
  • 26
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
  • 93
  • 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
  • 19
  • 2
0

For me it worked changing from implementation 'org.jetbrains.kotlin:kotlin-stdlib:1.5.30' to implementation 'org.jetbrains.kotlin:kotlin-stdlib:1.4.32'

0

I fixed this by navigating to the gradle.build file, and updating the version of the kotlin plugin.

For me, originally the configuration was:

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

So I changed the plugin's version to the latest available:

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

Tried all the answers from this page, the only thing that worked for me was to use jvmTarget = '11' :

android {
    kotlinOptions {
        jvmTarget = '11' (or any other java version that suits you)
    }
}
Goran Horia Mihail
  • 3,536
  • 2
  • 29
  • 40
-2

Just add in build.gradle module this code kotlinOptions { jvmTarget = '1.8' }