web-dev-qa-db-ja.com

起動はKotlin 1.3以降でのみ利用可能で、Kotlin 1.2では使用できません

私は実行しようとしています コルーチンを使用した最も簡単な例

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

そして、私のbuild.gradleファイルは次のようになります:

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

しかし、この例を実行すると、次のエラーが発生します。

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

なぜこれらのエラーが発生するのですか?最初のエラーで起動が「Kotlin 1.3以降でのみ利用可能でKotlin 1.2では使用できない」と表示されているため、完全に混乱していますが、build.gradleファイル(特に、 '1.3.0-rc)でKotlin 1.3を使用しています。 -146 ')...

[〜#〜]更新[〜#〜]

問題の理由はIntelliJにあるようですIDEA設定:

enter image description here

しかし、そこで選択できる最新の言語バージョンが1.3ではなく1.2である場合、それを修正する方法は?

6
Ksenia

Kotlinを1.3に更新したことを確認します。これはPreference->Lanugage & Framework->Kotlin Updatesから実行できます

次に、gradleでkotlin.jvmプラグインのバージョンを1.3.0に変更します。 ( https://plugins.gradle.org/plugin/org.jetbrains.kotlin.jvm

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

そしてcoroutinesを含めるため

repositories {
    mavenCentral()
}

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

今は大丈夫なはずです。

5
Suryavel TR

Kotlinプラグインのバージョンを変更する必要があります

現在のkotlinプラグインのバージョンは1.2.51です

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

これは正しいです

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