web-dev-qa-db-fra.com

le lancement est uniquement disponible depuis Kotlin 1.3 et ne peut pas être utilisé dans Kotlin 1.2

J'essaie de lancer l'exemple le plus simple avec coroutines :

    import kotlinx.coroutines.*

    fun main() {
        GlobalScope.launch {
            delay(1000L)
            println("${Thread.currentThread().name}: World")
        }
        println("${Thread.currentThread().name}: Hello")
        Thread.sleep(2000L)
        println("${Thread.currentThread().name}: Finish!")
    }

Et mon fichier build.gradle ressemble à ceci:

buildscript {
    // Consider moving these values to `gradle.properties`
    ext.kotlin_version = '1.3.0-rc-146'
    ext.kotlin_gradle_plugin_version = '1.3.0-rc-198'
    ext.kotlinx_coroutines = '1.0.0-RC1'

    repositories {
        maven { url "https://kotlin.bintray.com/kotlin-eap" }
        mavenCentral()
        jcenter()
        google()
    }
    dependencies {
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.2.51"
    }
}

plugins {
    id 'org.jetbrains.kotlin.jvm' version "1.1.51"
}

apply plugin: 'idea'
apply plugin: 'application'
group 'by.kotlin'
version '1.0-SNAPSHOT'

mainClassName = 'MainKt'

repositories {
    maven { url "https://kotlin.bintray.com/kotlin-eap" }
    mavenCentral()
    jcenter()
    google()
}

dependencies {
    implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
    implementation "org.jetbrains.kotlin:kotlin-stdlib-common:$kotlin_version"
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
    implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:$kotlinx_coroutines"   
}

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

Mais lorsque j'exécute cet exemple, j'ai les erreurs suivantes:

e: ...Main.kt: (6, 17): 'launch(CoroutineContext = ..., CoroutineStart = ..., [ERROR : Bad suspend function in metadata with constructor: Function2]<CoroutineScope, Continuation<Unit>, Any?>): Job' is only available since Kotlin 1.3 and cannot be used in Kotlin 1.2
e: ...Main.kt: (7, 9): Suspend function 'delay' should be called only from a coroutine or another suspend function
e: ...Main.kt: (7, 9): 'delay(Long): Unit' is only available since Kotlin 1.3 and cannot be used in Kotlin 1.2
> Task :compileKotlin FAILED

Pourquoi ces erreurs se produisent? Je suis complètement confus, car la première erreur dit que le lancement "n'est disponible que depuis Kotlin 1.3 et ne peut pas être utilisé dans Kotlin 1.2", mais j'utilise Kotlin 1.3 dans mon fichier build.gradle (en particulier, '1.3.0-rc -146 ') ... 

UPD

Il semble que la cause du problème se trouve dans IntelliJ IDEA.

 enter image description here

Mais comment y remédier, si la dernière version linguistique, qui peut être sélectionnée ici, est 1.2, pas 1.3?

3
Ksenia

Assurez-vous d'avoir mis à jour Kotlin en 1.3. Vous pouvez le faire à partir de Preference->Lanugage & Framework->Kotlin Updates

Puis changez la version du plug-in kotlin.jvm en 1.3.0 dans gradle. ( https://plugins.gradle.org/plugin/org.jetbrains.kotlin.jvm )

plugins {
    id 'org.jetbrains.kotlin.jvm' version "1.3.0"
}

Et pour inclure coroutines

repositories {
    mavenCentral()
}

dependencies {
    compile group: 'org.jetbrains.kotlinx', name: 'kotlinx-coroutines-core', version: '1.0.0'
}

Ça devrait aller maintenant.

4
Suryavel TR

Vous devez changer la version du plugin Kotlin 

Votre version actuelle du plugin Kotlin est 1.2.51

dependencies {
    classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.2.51"
}

c'est correct 

buildscript {
     ext.kotlin_version = '1.3.0'
     ext.kotlin_gradle_plugin_version = '1.3.0'
     ext.kotlinx_coroutines = '1.0.0'

     repositories {
         maven { url "https://kotlin.bintray.com/kotlin-eap" }
         mavenCentral()
         jcenter()
         google()
     }
     dependencies {
         'org.jetbrains.kotlin:kotlin-gradle-plugin:'+kotlin_version
     }
}
1
Kourosh