Impossible d'utiliser le bytecode intégré avec la cible JVM 1.8 dans le bytecode qui est construit avec la cible JVM 1.6


487

Lorsque j'essaie d'exécuter l'exemple CorDapp ( https://github.com/corda/cordapp-example ) via IntelliJ, je reçois l'erreur suivante:

Impossible d'utiliser le bytecode intégré avec la cible JVM 1.8 dans le bytecode qui est construit avec la cible JVM 1.6

Comment puis-je modifier les paramètres IntelliJ pour que tout le bytecode soit construit avec la même cible JVM?


5
J'ai pu résoudre ce problème en ajoutant cette bibliothèque aux build.gradledépendances {compile ("org.jetbrains.kotlin: kotlin-stdlib-jdk8")}
Munish Chandel

1
@MunishChandel Ce n'est pas suffisant. Nous devons également faire ce que la réponse ci-dessous suggère ...
IgorGanapolsky

Réponses:


1038

app / build.gradle

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

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

GL

Utiliser les fonctionnalités du langage Java 8


32
Cela devrait être la solution vérifiée.
Phil

9
À partir de cette date et d'Android Studio v3.5, c'est la seule solution qui a fonctionné, après avoir essayé tout le reste. Curieusement, la définition de la même valeur dans Paramètres> Kotlin Compiler n'a aucun effet.
user3399299

53
Tout kotlinOptions { jvmTarget = "1.8" }devrait suffire.
Petter

2
travaillé, et la réponse est explicite et écrite de manière concise
Vikas Pandey

4
Ensuite, "invalider le cache et redémarrer"
B-GangsteR

215

Vous pouvez résoudre ce problème comme suit:

  • Ouvrez les préférences IntelliJ
  • Aller à Build, Execution, Deployment> Compiler> Kotlin Compiler MAIS Other Settings > Kotlin compilersi Android Studio>3.4
  • Remplacez le Target JVM versionpar1.8
  • Cliquez sur Apply

6
J'ai déjà ce paramètre fixé à 1.8, mais je vois toujours cette erreur lors de la progression dans les points d'arrêt. Je le vois principalement lors de l'exécution de requêtes de coffre-fort. Avez-vous d'autres suggestions? Il semble que ce bit JVM cible ne le répare pas complètement.
Arsalan Khalid

38
Sur votre structure du projet , assurez-vous de changer aussi Target platformà JVM 1.8 sur votre KotlinFacet sous l' Generalonglet.
Anyul Rivas

7
Cette erreur peut apparaître s'il existe une dépendance non résolue !
programaths

5
Pour moi, les Kotlin Compilerparamètres ont été placés dans la Other Settingssection.
qwertyfinger

10
Si le redémarrage après l'application n'est pas suffisant → Redémarrer et invalider les caches.
Bartek Lipinski

104

vous devez configurer quelque chose comme suit dans build.gradle

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

14
Ou bien, dans le Gradle Kotlin DSL:tasks.withType<org.jetbrains.kotlin.gradle.tasks.KotlinCompile> { kotlinOptions.jvmTarget = "1.8" }
breandan

Une idée comment faire fonctionner cela avec le kotlin-androidplugin?
ZeroDivide

Fonctionne sans trop de tracas. Je le recommanderais
Mitch

Je l'avais dans build.gradle, mais IDEA a en quelque sorte remplacé ce paramètre. La réponse de Saeed a fonctionné pour moi.
nils petersohn

Ajoutez-le dans la section Android {} de Gradle au niveau de votre application.
Parag Kadam

80

Dans mon cas, changer simplement la version JVM cible comme ceci: Fichier> Paramètres> Compilateur Kotlin> Version JVM cible> 1.8 n'a pas aidé. Cependant, il résout l'erreur de compilation. Mais a échoué à l'exécution.

J'ai également dû ajouter ce qui suit dans le fichier build.gradle de l'application pour le faire fonctionner.

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

2
fonctionne un charme. merci
dave o grady

travaux! merci
Waldmann

55

Lorsque les autres solutions n'ont pas fonctionné pour vous (modification de la version de la JVM sur les paramètres du compilateur et ajout jvmTargetà votre build.gradle), en raison de vos .imlfichiers essayant de forcer leurs configurations, vous pouvez changer la plate-forme cible à partir des paramètres du projet.

  • Ouvert File > Project Structure
  • Aller FacetssousProject Settings
    • S'il est vide, cliquez sur le petit +bouton
  • Cliquez sur votre / vos module (s) Kotlin
  • Changez le Target Platformen JVM 1.8(il est également préférable de cocher l' Use project settingsoption)

3
Je ne trouve pas cela ou la section 'facettes' dans Android Studio ... 🤔 J'ai dû modifier manuellement app.iml. Je me mis <configuration version="3" platform="JVM 1.8" useProjectSettings="false">à trueet cela a fonctionné. Cependant, le fichier continue de changer en arrière!
Aphex

1
@Aphex C'est en fait sous "Fichier"> "Structure du projet" puis sous "Paramètres du projet"> "Facettes", je n'avais rien là-bas, alors j'ai cliqué sur "+"> "Kotlin"> Sélectionnez mon projet. Ça m'est arrivé :)
Nicolas Guillaume

Cela fonctionne pour moi, mais étant forcé de revenir à 1.6 chaque fois que j'ajoute à mon fichier build.gradle.kts.
Lou Morda

Existe-t-il un moyen de le configurer et de le récupérer dans le fichier Gradle? À mon humble avis, cette mauvaise configuration est un bogue dans intellij.
Jilles van Gurp

35

Dans mon cas, ce code n'a pas fonctionné jusqu'à ce que je passe apply plugin: 'kotlin-android'de bas en haut.

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 l'astuce pour moi, thx
Didi

32

Dans Android Studio 4.3.2, l'ajout via la procédure ci-dessous ne fonctionne pas.

  1. Ouvrez les préférences IntelliJ
  2. Accédez à Build, Execution, Deployment > Compiler > Kotlin Compiler BUT Other Settings> Kotlin compiler if Android Studio> 3.4
  3. Changez la version de la JVM cible en 1.8
  4. Cliquez sur Appliquer

La raison en est qu'Android Studio n'est pas en mesure d'ajouter le code ci-dessous dans le fichier Gradle au niveau du module. Veuillez l'ajouter manuellement.

kotlinOptions {
    jvmTarget = "1.8"
}

Juste pour l'addon, recherchez la version JVM cible dans la recherche de studio Android. Cela vous amènera directement à l'option. entrez la description de l'image ici


seulement en ajoutant manuellement, cela a fonctionné pour moi. Pour une raison quelconque, Android Studio est vraiment bogué et il ne considère pas les modifications appliquées à moins que nous ne redémarrions l'ide en supprimant tout le cache.
Karan Sharma


26

Feb 2020
android 3.4+
Allez dans Fichier -> Paramètres -> Compilateur Kotlin -> Version JVM cible> défini sur 1.8 puis assurez-vous de faire Fichier -> Projet de synchronisation avec les fichiers Gradle

Ou ajoutez-le dans build.gradle (module: app) dans le bloc Android :

kotlinOptions {
           jvmTarget = "1.8"
         }

juste "Projet de synchronisation avec des fichiers Gradle" fonctionne pour moi ..
Akash Bisariya

a confirmé que vous devez faire File -> Sync project with Gradle files, then it works
Irfandi D. Vendy

19

Comme il est écrit dans les documents using-maven du site Web de Kotlin:

Il vous suffit de mettre <kotlin.compiler.jvmTarget>1.8</kotlin.compiler.jvmTarget>dans la section des propriétés de votre pom.xml


19

Si vous avez de nombreux jeux de sources / modules, il peut être fastidieux de configurer jvmTarget pour chacun d'eux séparément.

Vous pouvez configurer jvmTarget pour chacun d'eux à la fois comme ceci:

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

Cet extrait peut être utilisé au niveau supérieur de votre fichier gradle.build

Après avoir modifié le fichier gradle Reimport All Gradle Imports. Pour vérifier si cela a fonctionné, ouvrez Project Structureet vérifiez que IntelliJ est correctement attribué JVM 1.8à tous les modules Kotlin. Ça devrait ressembler à ça:

structure du projet

Je ne recommanderais pas de changer la plate-forme directement dans IntelliJ, car quiconque clonant votre projet pour la première fois est susceptible de rencontrer le même problème. Le configurer correctement dans gradle a l'avantage qu'IntelliJ va se comporter correctement pour eux dès le début.


16

Dans mon cas, j'ai résolu cela en suivant ces deux étapes

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

Hé merci pour la réponse, j'ai dû faire la 2ème étape, et son fonctionnement. Pouvez-vous expliquer pourquoi cela est nécessaire?
hushed_voice

vous pouvez trouver plus de détails sur ce problème fermé, il est bon de savoir [ github.com/mikepenz/Android-Iconics/issues/454]
Vikas Sharma

Ce lien est mort
hushed_voice

12

Pour moi, la raison était que cette configuration dans ma version était dans certains modules et dans certains, ce n'était pas

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

1
Merci, c'était la seule solution qui fonctionnait pour moi. J'utilise des fichiers kts buiild.
Krames

Merci, ce sont aussi les solutions qui ont fonctionné pour moi. Et beaucoup déclaratif de cette façon. stackoverflow.com/a/57041765/3763032 kevin a également déclaré cela, en raison de la smartcast dans les fichiers de notes de kotlin .kts, il est disponible directement
mochadwi

12

Pour Gradle avec la langue Kotlin ( *.gradle.ktsfichiers), ajoutez ceci:

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

Pourquoi avons-nous besoin de casting thispour KotlinJvmOptions. Le thisrécepteur n'est-il pas kotlinOptionsdéjà dans le bloc KotlinJvmOptions? Cela ne fonctionne toujours pas pour moi sans le casting
11m0

1
@ 11m0, je pense que c'est lié à ce problème: github.com/gradle/kotlin-dsl-samples/issues/1368
HDW

Lorsque KotlinJvmOptions est introuvable, essayez d'utiliser le nom complet "org.jetbrains.kotlin.gradle.dsl.KotlinJvmOptions".
HDW

4

dans la plupart des cas, cela suffit:

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

si vous avez déclaré des tâches Gradle personnalisées comme integrationTestpar exemple, ajoutez également une configuration pour compile<YourTaskName>Kotlin:

compileIntegrationTestKotlin {
    kotlinOptions.jvmTarget = "1.8"
}

cela fonctionnerait aussi en ajoutant au fichier gradle -> compileOptions {sourceCompatibility = 1.8 targetCompatibility = 1.8} kotlinOptions {jvmTarget = "1.8"}
Sanket Patel

Fait intéressant, seule votre solution a fonctionné avec mon module non Android! Merci!
Mohammad Omidvar

4

Le paramètre sourceCompatibility = JavaVersion.VERSION_1_8permet de désugarer, mais il est actuellement incapable de désugarer toutes les fonctionnalités Java 8 que le compilateur Kotlin utilise.

entrez la description de l'image ici

Fix - Le réglage kotlinOptions.jvmTarget to JavaVersion.VERSION_1_8dans le module d'application Gradle résoudrait le problème.

Utilisez les fonctionnalités du langage 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

Toutes les réponses ici utilisent gradle mais si quelqu'un comme moi se retrouve ici et a besoin d'une réponse pour 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>

Le changement de l'archétype jetbrains pour kotlin-jvm est la <configuration></configuration>spécification de jvmTarget. Dans mon cas 11


3

Rien n'a fonctionné pour moi jusqu'à ce que je mette à jour ma dépendance de plugin kotlin.
Essayez ceci:
1. Invalidez cahce et redémarrez.
2. Projet de synchronisation (essayez au moins)
3. Aller fichier -> Structure du projet -> Suggestions
4. S'il y a une mise à jour concernant Kotlin, mettez-la à jour.
J'espère que cela aidera quelqu'un.


la solution la plus simple
u84six

2

Si vous utilisez Visual Studio Code ** avec l'extension Kotlin, allez dans la gestion des plugins Crtl + Shift + x, tapez kotlin et cliquez sur gérer (le petit engrenage) >> Configurer les paramètres d'extension

sur Kotlin >> Compilateur >> Jvm: Target - tapez la version java. Dans ma situation, je viens de taper 1,8

Et puis redémarrez :-)

** vscode ou simplement 'code' pour linux


2

Dans mon cas, Fichier> Paramètres> Compilateur Kotlin> Version JVM cible> 1.8


2

J'utilise Kotlin et Gradle pour le développement normal de la JVM, (pas Android) et cela a fonctionné pour moi dans build.gradle:

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

2

si vous êtes dans un projet android

dans le build.gradle de votre application sous 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"
    }
}

1

Si vous utilisez Eclipse en supposant que vous avez téléchargé le plugin Kotlin:

Cliquez avec le bouton droit sur le projet -> Propriétés -> Kotlin Compiler -> Activer les paramètres spécifiques au projet -> Version cible JVM "1.8"


1

Pour les versions récentes d'Android Studio, si la modification de la version de Kotlin Target VM ne fonctionnait pas.

Fichier Structure Structure du projet ➞ Modules ( app): définissez "Compatibilité source" et "Compatibilité cible" sur "1.8 (Java 8)". Appuyez sur "OK" et synchronisez le projet avec Gradle.


1

En utilisant le DSL Kotlin Gradle, cela a résolu le problème pour moi. J'ai ajouté ceci au build.gradle.kts. Ceci s'ajoute à la réponse de Joel

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

1
Pouvez-vous s'il vous plaît partager où exactement dans le fichier que vous avez mis cela? Et quelle version du plugin et gradle android vous utilisez?
treesAreEverywhere

Ce n'est pas un projet Android. J'utilise Gradle 6.4.
Briantical

0

Un autre indice pour les utilisateurs d'Eclipse. Après avoir revérifié les paramètres cibles jvm signalés par d'autres utilisateurs, j'ai toujours eu le même problème, et cela était dû à la bibliothèque Kotlin Runtime manquante. Par exemple, lors de la création d'un projet avec Spring Initializr, il n'est pas ajouté automatiquement. Pour l'ajouter:, right click on your project -> Build path -> Add libraries... -> User Libraryet ajoutez simplementorg.jetbrains.kotlin.core.KOTLIN_CONTAINER

Assurez-vous de rafraîchir votre projet Gradle par la suite ( right click -> Gradle -> Refresh gradle project)


0

Si vous êtes confronté à ce message dans un projet Spring Boot / Kotlin, définissez simplement la propriété "kotlin.compiler.jvmTarget" sur "1.8" dans votre pom.xml.

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

0

Dans mon cas, jvmTarget était déjà défini dans le build.gradlefichier comme ci-dessous.

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

Mais mon problème était toujours là. Enfin, il est résolu après avoir changé la version JVM cible de 1.6 à 1.8 dans Préférences> Autres paramètres> Compilateur Kotlin> Version JVM cible. voir photo ci-jointe,

entrez la description de l'image ici

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.