No se puede incluir el bytecode integrado con JVM target 1.8 en bytecode que se está creando con JVM target 1.6

487

Cuando intento ejecutar el ejemplo CorDapp ( https://github.com/corda/cordapp-example ) a través de IntelliJ, recibo el siguiente error:

No se puede incluir el bytecode integrado con JVM target 1.8 en bytecode que se está creando con JVM target 1.6

¿Cómo puedo modificar la configuración de IntelliJ para que todo el bytecode se construya con el mismo objetivo JVM?

Joel
fuente
55
Pude resolver este problema agregando esta biblioteca a las build.gradledependencias {compile ("org.jetbrains.kotlin: kotlin-stdlib-jdk8")}
Munish Chandel
1
@MunishChandel Eso no es suficiente. También debemos hacer lo que sugiere la respuesta a continuación ...
IgorGanapolsky

Respuestas:

1038

app / build.gradle

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

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

GL

Utilice las funciones del lenguaje Java 8

Braian Coronel
fuente
32
Esta debería ser la solución comprobada.
Phil
99
A partir de esta fecha y Android Studio v3.5, esta es la única solución que funcionó, después de probar todo lo demás. Curiosamente, establecer el mismo valor en Configuración> Compilador Kotlin no tiene ningún efecto.
user3399299
53
Solo el kotlinOptions { jvmTarget = "1.8" }debería ser suficiente.
Peter el
2
funcionó, y la respuesta se explica por sí misma y es concisamente escrita
Vikas Pandey
44
Entonces debería "invalidar el caché y reiniciar"
B-GangsteR
215

Puede solucionar este problema de la siguiente manera:

  • Abra las preferencias de IntelliJ
  • Ir a Build, Execution, Deployment> Compiler> Kotlin Compiler pero Other Settings > Kotlin compilersi Android Studio>3.4
  • Cambiar el Target JVM versiona1.8
  • Hacer clic Apply
Joel
fuente
66
Ya tengo esta configuración fija en 1.8, pero aún veo este error cuando paso por los puntos de interrupción. Principalmente veo esto cuando recibo consultas de bóveda. ¿Alguna sugerencia adicional? Parece que este bit JVM de destino no lo soluciona por completo.
Arsalan Khalid
38
En su Estructura de proyecto , asegúrese de cambiar también Target platforma JVM 1.8 en su KotlinFaceta en la Generalpestaña.
Anyul Rivas el
77
¡Este error puede aparecer si hay una dependencia no resuelta !
programaths
55
Para mí, la Kotlin Compilerconfiguración se colocó en la Other Settingssección.
qwertyfinger
10
Si reiniciar después de aplicar no es suficiente → Reiniciar e invalidar cachés.
Bartek Lipinski
104

debe configurar algo como lo siguiente en build.gradle

tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).all {
    kotlinOptions {
        jvmTarget = "1.8"
    }
}
Amuthan
fuente
14
O, alternativamente, en el Gradle Kotlin DSL:tasks.withType<org.jetbrains.kotlin.gradle.tasks.KotlinCompile> { kotlinOptions.jvmTarget = "1.8" }
Breandan
¿Alguna idea de cómo hacer que esto funcione con el kotlin-androidcomplemento?
ZeroDivide
Funciona sin mucha molestia. Lo recomendaría
Mitch
Tenía esto en build.gradle, pero de alguna manera IDEA sobrescribió esta configuración. La respuesta de Saeed funcionó para mí.
nils petersohn
Agregue esto en la sección de Android {} de Gradle de su nivel de aplicación.
Parag Kadam
80

En mi caso, simplemente cambiar la versión JVM de Target de esta manera: Archivo> Configuración> Compilador Kotlin> Versión JVM de destino> 1.8 no ayudó. Sin embargo, resuelve el error en tiempo de compilación. Pero falló en tiempo de ejecución.

También tuve que agregar lo siguiente en el archivo build.gradle de la aplicación para que funcione.

 android {
     // Other code here...
     kotlinOptions {
        jvmTarget = "1.8"
     }
 }
MD Nehaluddin Haider
fuente
2
Funciona un encanto. gracias
dave o grady
¡trabajos! gracias
Waldmann
55

Cuando las otras soluciones no funcionaron para usted (cambiar la versión de JVM en la configuración del compilador y agregarla jvmTargeta su build.gradle), debido a que sus .imlarchivos intentan forzar sus configuraciones, puede cambiar la plataforma de destino desde la configuración del proyecto.

  • Abierto File > Project Structure
  • Ir a FacetsdebajoProject Settings
    • Si está vacío, haga clic en el +botón pequeño
  • Haga clic en su módulo / módulos Kotlin
  • Cambie Target Platforma JVM 1.8(también es mejor marcar la Use project settingsopción)
Saeed Masoumi
fuente
3
No puedo encontrar esta o la sección 'facetas' en Android Studio ... had Tuve que editar la app.iml manualmente. Me puse <configuration version="3" platform="JVM 1.8" useProjectSettings="false">a truey funcionó. Sin embargo, el archivo sigue cambiando de nuevo!
Aphex
1
@Aphex En realidad está en "Archivo"> ​​"Estructura del proyecto" y luego en "Configuración del proyecto"> "Facetas", no tenía nada allí, así que hice clic en "+"> "Kotlin"> Seleccione mi proyecto. Eso lo hizo por mí :)
Nicolas Guillaume
Esto funciona para mí, pero me obligan a volver a 1.6 cada vez que agrego a mi archivo build.gradle.kts.
Lou Morda
¿Hay alguna manera de tener esto configurado y recogido del archivo gradle? En mi humilde opinión esto está mal configurado es un error en intellij.
Jilles van Gurp
35

En mi caso, este código no funcionó hasta que me moví apply plugin: 'kotlin-android'de abajo hacia arriba.

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"
    }
}
Ara Badalyan
fuente
kotlinOptions {jvmTarget = "1.8"} Didi el truco para mí, gracias
Didi
32

En Android Studio 4.3.2, agregar a través del siguiente procedimiento no funciona.

  1. Abra las preferencias de IntelliJ
  2. Ir a construir, ejecución, despliegue > Compilador > Kotlin Compilador PERO Otras opciones> Kotlin compilador si Android Studio> 3.4
  3. Cambie la versión de Target JVM a 1.8
  4. Haga clic en Aplicar

La razón es que Android Studio no puede agregar el siguiente código en el archivo Gradle de nivel de módulo. Por favor agrégalo manualmente.

kotlinOptions {
    jvmTarget = "1.8"
}

Solo para el complemento, busque la versión de Target JVM en la búsqueda de Android Studio. Te llevará directamente a la opción. ingrese la descripción de la imagen aquí

Muhammad Maqsood
fuente
solo agregando manualmente, funcionó para mí. Por alguna razón, Android Studio es realmente defectuoso y no considera los cambios aplicados a menos que reiniciemos el ID eliminando todo el caché.
Karan Sharma
28

una imagen vale mas que mil palabras

una imagen vale mas que mil palabras

Ahmed D. Sherif
fuente
También buscar en el panel de configuración mostrará esta opción. ¡Gracias por esto fue realmente útil!
Princeps Polycap
no me ayudó
Waldmann
26

Feb 2020
android 3.4+
Vaya a Archivo -> Configuración -> Compilador Kotlin -> Versión JVM de destino> configure en 1.8 y luego asegúrese de hacer Archivo -> Sincronizar proyecto con archivos Gradle

O agregue esto a build.gradle (módulo: aplicación) en el bloque de Android :

kotlinOptions {
           jvmTarget = "1.8"
         }
USMAN osman
fuente
solo "Sincronizar proyecto con archivos Gradle" funciona para mí ..
Akash Bisariya
confirmó que necesita hacer Archivo -> Sincronizar proyecto con archivos Gradle, luego funciona
Irfandi D. Vendy
19

Como está escrito en el uso de Maven documentos del sitio web de Kotlin:

Solo tienes que ponerlo <kotlin.compiler.jvmTarget>1.8</kotlin.compiler.jvmTarget>en la sección de propiedades de tu pom.xml

Johan Vergeer
fuente
19

Si tiene muchos fuentes / módulos, puede ser complicado configurar jvmTarget para cada uno de ellos por separado.

Puede configurar jvmTarget para todos a la vez de la siguiente manera:

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

Este fragmento se puede usar en el nivel superior de su archivo gradle.build

Después de modificar el archivo gradle Reimport All Gradle Imports. Para verificar si funcionó, abra Project Structurey verifique que IntelliJ se haya asignado correctamente JVM 1.8a todos los módulos Kotlin. Debe tener un aspecto como este:

estructura del proyecto

Yo no recomiendo cambiar la plataforma directamente en IntelliJ, porque nadie más la clonación de su proyecto por primera vez, es probable que se enfrentan el mismo problema. Configurarlo correctamente en Gradle tiene la ventaja de que IntelliJ se comportará correctamente desde el principio.

Fabian Braun
fuente
16

En mi caso, resolví esto siguiendo estos dos pasos

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
fuente
Hola, gracias por la respuesta, tuve que hacer el segundo paso, y está funcionando. ¿Puedes explicar por qué es necesario?
hushed_voice
puede encontrar más detalles sobre este tema cerrado que es bueno saber [ github.com/mikepenz/Android-Iconics/issues/454]
Vikas Sharma
Ese enlace está muerto
hushed_voice
12

Para mí, la razón fue que esta configuración en mi gradle de construcción estaba en algunos módulos y en algunos no

android {  
...      
kotlinOptions {
        val options = this as KotlinJvmOptions
        options.jvmTarget = "1.8"
    }
...
android {
AdrianoCelentano
fuente
1
Gracias, esta fue la única solución que funcionó para mí. Estoy usando los archivos kts buiild.
Krames
Gracias, esta es también la solución que funcionó para mí. Y mucho declarativo de esta manera. stackoverflow.com/a/57041765/3763032 kevin también declaró esto, debido a la transmisión inteligente en kotlin gradle files .kts está disponible directamente
mochadwi
12

Para Gradle con lenguaje Kotlin ( *.gradle.ktsarchivos), agregue esto:

android {
    [...]
    kotlinOptions {
        this as KotlinJvmOptions
        jvmTarget = "1.8"
    }
}
Kevin Robatel
fuente
¿Por qué necesitamos fundido thisa KotlinJvmOptions. ¿ Ya no está el thisreceptor en el kotlinOptionsbloque KotlinJvmOptions? Aún así no funciona para mí sin el elenco
11m0
1
@ 11m0, creo que está relacionado con este problema: github.com/gradle/kotlin-dsl-samples/issues/1368
HDW
Cuando no se encuentre KotlinJvmOptions, intente utilizar el nombre completo "org.jetbrains.kotlin.gradle.dsl.KotlinJvmOptions".
HDW
4

en la mayoría de los casos esto es suficiente:

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

si ha declarado tareas personalizadas de Gradle como, integrationTestpor ejemplo, agregue también una configuración para compile<YourTaskName>Kotlin:

compileIntegrationTestKotlin {
    kotlinOptions.jvmTarget = "1.8"
}
naXa
fuente
esto también funcionaría agregando al archivo gradle -> compileOptions {sourceCompatibility = 1.8 targetCompatibility = 1.8} kotlinOptions {jvmTarget = "1.8"}
Sanket Patel
Curiosamente, ¡solo su solución funcionó con mi módulo no Android! ¡Gracias!
Mohammad Omidvar
4

La configuración sourceCompatibility = JavaVersion.VERSION_1_8habilita la eliminación de azúcares, pero actualmente no puede eliminar todas las funciones de Java 8 que utiliza el compilador Kotlin.

ingrese la descripción de la imagen aquí

Solución: la configuración kotlinOptions.jvmTarget to JavaVersion.VERSION_1_8en el módulo de aplicación Gradle solucionaría el problema.

Utilice las funciones del lenguaje 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"
  }
}
Anoop M
fuente
3

Todas las respuestas aquí están usando gradle, pero si alguien como yo termina aquí y necesita respuesta para 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>

El cambio del arquetipo jetbrains para kotlin-jvm es la <configuration></configuration>especificación de jvmTarget. En mi caso 11

Mattie
fuente
3

Nada funcionó para mí hasta que actualicé mi dependencia del complemento kotlin.
Pruebe esto:
1. Invalidar cahce y reiniciar.
2. Sincronice el proyecto (al menos intente)
3. Vaya a Archivo -> Estructura del proyecto -> Sugerencias
4. Si hay una actualización con respecto a Kotlin, actualícela.
Espero que ayude a alguien.

Waldmann
fuente
la solución más fácil
u84six
2

Si usa Visual Studio Code ** con la extensión Kotlin, vaya a la administración de complementos Crtl + Shift + x, escriba kotlin y haga clic en administrar (el pequeño engranaje) >> Configurar ajustes de extensión

en Kotlin >> Compilador >> Jvm: Target - escriba la versión de Java. En mi situación solo escribí 1.8

Y luego reiniciar :-)

** vscode o simplemente 'code' para linux

Hinotori
fuente
2

En mi caso, Archivo> Configuración> Compilador Kotlin> Versión JVM de destino> 1.8

Cuentas
fuente
2

Estoy usando Kotlin y Gradle para el desarrollo normal de JVM (no Android) y esto funcionó para mí en build.gradle:

allprojects {
    tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).configureEach {
        kotlinOptions.jvmTarget = JavaVersion.VERSION_11.toString()
    }
}
Peter V. Mørch
fuente
2

si estás en proyecto android

en el build.gradle de tu aplicación en 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"
    }
}
hombre de Acero
fuente
1

Si usa Eclipse suponiendo que descargó el complemento de Kotlin:

Haga clic con el botón derecho en el proyecto -> Propiedades -> Compilador Kotlin -> Habilitar configuraciones específicas del proyecto -> Versión de destino JVM "1.8"

Invertir
fuente
1

Para las versiones recientes de Android Studio, si cambiar solo la versión de Kotlin Target VM no funcionó.

Archivo ➞ Estructura del proyecto ➞ Módulos ( app): establezca "Compatibilidad de origen" y "Compatibilidad de destino" en "1.8 (Java 8)". Presiona "Aceptar" y sincroniza el proyecto con Gradle.

ZzZombo
fuente
1

Usando Kotlin Gradle DSL, esto resolvió el problema para mí. Agregué esto a build.gradle.kts. Esto se suma a la respuesta de Joel

val compileKotlin: KotlinCompile by tasks
compileKotlin.kotlinOptions.jvmTarget = JavaVersion.VERSION_1_8.toString()
Briantical
fuente
1
¿Puedes compartir dónde exactamente en el archivo que pones esto? ¿Y qué versión del complemento y gradle de Android está utilizando?
treesAreEverywhere
Este no es un proyecto de Android. Estoy ejecutando Gradle 6.4.
Briantical
0

Otra pista para los usuarios de Eclipse. Después de verificar dos veces la configuración de destino de jvm señalada por otros usuarios, todavía tenía el mismo problema, y ​​eso fue causado por la falta de Kotlin Runtime Library. Por ejemplo, al crear un proyecto con spring initializr, no se agrega automáticamente. Para agregarlo: right click on your project -> Build path -> Add libraries... -> User Libraryy simplemente agregueorg.jetbrains.kotlin.core.KOTLIN_CONTAINER

Asegúrese de actualizar su proyecto gradle después ( right click -> Gradle -> Refresh gradle project)

malaquf
fuente
0

Si enfrenta este mensaje en un proyecto Spring Boot / Kotlin, simplemente configure la propiedad "kotlin.compiler.jvmTarget" en "1.8" en su pom.xml.

    <properties>
        <kotlin.version>1.3.70</kotlin.version>
        <kotlin.compiler.jvmTarget>1.8</kotlin.compiler.jvmTarget>
    </properties>
    ...
ed3d
fuente
0

En mi caso, jvmTarget ya estaba configurado en el build.gradlearchivo como se muestra a continuación.

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

Pero mi problema seguía ahí. Finalmente, se resuelve después de cambiar la versión de Target JVM de 1.6 a 1.8 en Preferencias> Otras configuraciones> Compilador Kotlin> Versión de Target JVM. ver imagen adjunta,

ingrese la descripción de la imagen aquí

Shoaib Mushtaq
fuente