105 votes

Pourquoi le plugin Kotlin Gradle ne peut pas construire avec une cible 1.8?

J'ai le projet de Gradle le plus simple configuré en utilisant intellij pour Kotlin 1.2.10. Voici mon fichier build.gradle:

 buildscript {
    ext.kotlin_version = '1.2.10'

    repositories {
        mavenCentral()
    }
    dependencies {
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    }
}

group 'com.ali'
version '1.0-SNAPSHOT'

apply plugin: 'java'
apply plugin: 'kotlin'

sourceCompatibility = 1.8

repositories {
    mavenCentral()
}

dependencies {
    compile "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
    testCompile group: 'junit', name: 'junit', version: '4.12'
}

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

Et j'ai une interface java simple:

 public interface MyMath {
    static int myAbs(int input) {
        return Math.abs(input);
    }
}
 

Lorsque j'importe cette interface et que j'essaie d'appeler la méthode myAbs , elle échoue avec l'erreur suivante:

 Error:(6, 12) Kotlin: Calls to static methods in Java interfaces are prohibited in JVM target 1.6. Recompile with '-jvm-target 1.8'
 

J'ai créé une application intellij kotlin et elle fonctionnait correctement. Est-ce un bug dans le nouveau plugin Kotlin Gradle?

188voto

Jairo Lozano Points 428

Je pense que cela pourrait être utile pour ceux qui utilisent Android Studio 3.2 sur Mac.

Pour modifier le Kotlin Compilateur Cible JVM version vous devriez aller pour Android Studio -> Préférences -> Kotlin Compilateur et puis changer la Cible de la JVM version choisissant dans la liste déroulante.

De toute façon, je suis encore en train d'erreur suivants

Les appels à des méthodes statiques dans les interfaces de Java sont interdits dans la JVM cible 1.6. Recompiler avec '-jvm-cible de 1,8'

RÉSOLU

En ajoutant ce qui suit à mon construire.gradle résolu le problème:

android {
    kotlinOptions {
        jvmTarget = '1.8'
    }
}

À ce sujet et d'autres Gradle options de configuration: https://kotlinlang.org/docs/reference/using-gradle.html


Avec Kotlin Gradle LIS:

import org.jetbrains.kotlin.gradle.dsl.KotlinJvmOptions

(kotlinOptions as KotlinJvmOptions).apply {
    jvmTarget = JavaVersion.VERSION_1_8.toString()
}

84voto

alisabzevari Points 496

Il s’est avéré que c’était la configuration de mon compilateur Kotlin dans les paramètres intellij. En Settings > Build, Execution, Deployment > Compiler > Kotlin Compiler un paramètre appelé Target JVM version aurait dû être défini sur 1,8.

24voto

Antal Attila Points 61

Veuillez vérifier si vous avez les trois choses ensemble dans l'idée:

  1. kotlin options dans la construction.gradle
    kotlinOptions {
        jvmTarget = '1.8'
    }
  1. Vérifier la Idée des préférences Preferences

  2. Vérifiez le projet Facettes enter image description here

3voto

Tim Keating Points 2942

Ceci est également défini dans les paramètres du projet, sous Project Settings > Modules > Kotlin . C'était mon problème spécifique… littéralement la dernière chose que j'ai essayée.

1voto

Zoe Points 9634

Pas tout à fait sûr de savoir pourquoi cela fonctionne, mais vous pouvez essayer de modifier le paramètre dans l'Idée elle-même. Depuis Gradle à partir de la ligne de commande fonctionne, mais pas lors de la construction de l'Ide, c'est probablement la racine.

Allez dans Fichier -> Structure de Projet. Allez à l'onglet Projet et veillez à ce que le SDK est de 8 (ou plus récent) et l'ensemble de l' Project language level de Java 8

enter image description here

La config il semble y substituer Gradle pour une raison quelconque, la modification, il doit travailler

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X