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?
build.gradle
dependencies { compile("org.jetbrains.kotlin:kotlin-stdlib-jdk8") }
app/build.gradle
android {
...
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
kotlinOptions {
jvmTarget = JavaVersion.VERSION_1_8.toString()
}
}
GL
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
Target platform
to JVM 1.8 on your Kotlin
Facet under the General
tab.
Kotlin Compiler
settings were actually placed in Other Settings
section.
you should configure something like as follows in build.gradle
tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).all {
kotlinOptions {
jvmTarget = "1.8"
}
}
tasks.withType<org.jetbrains.kotlin.gradle.tasks.KotlinCompile> { kotlinOptions.jvmTarget = "1.8" }
kotlin-android
plugin?
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
}
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"
}
}
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
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)
<configuration version="3" platform="JVM 1.8" useProjectSettings="false">
to true
and it worked. However, the file keeps changing back!
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"
}
}
In Android Studio 4.3.2 adding through the below procedure is not working.
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
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"
}
https://i.stack.imgur.com/VmxAo.png
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"
}
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:
https://i.stack.imgur.com/SdndZ.png
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.
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
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,
https://i.stack.imgur.com/zonA2.png
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"
}
}
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 {
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"
}
}
For Gradle with Kotlin language (*.gradle.kts
files), add this:
android {
[...]
kotlinOptions {
this as KotlinJvmOptions
jvmTarget = "1.8"
}
}
this
to KotlinJvmOptions
. Isn't the this
receiver in the kotlinOptions
block already KotlinJvmOptions
? Still it doesn't work for me without the cast
The next solution helped me. Add to build.gradle
compileKotlin {
kotlinOptions.jvmTarget = "1.8"
}
compileTestKotlin {
kotlinOptions.jvmTarget = "1.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"
}
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
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.
https://i.stack.imgur.com/k77tB.png
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"
}
}
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.
}
}
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"
}
}
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"
}
}
}
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()
}
}
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
suppressKotlinVersionCompatibilityCheck
but don't say I didn't warn you!)."
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
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.
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()
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"
In my case File > Setting > Kotlin Compiler > Target JVM Version > 1.8
Success story sharing
kotlinOptions { jvmTarget = "1.8" }
should suffice.compileOptions
andkotlinOptions
go?