запуск доступен только начиная с 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", но я использую Kotlin 1.3 в моем файле build.gradle (в частности, '1.3.0-rc -146')...

UPD

Похоже, причина проблемы в настройках IntelliJ IDEA:

введите описание изображения здесь

Но как исправить, если последняя языковая версия, которую там можно выбрать, 1.2, а не 1.3?


person Ksenia    schedule 28.10.2018    source источник
comment
В вашем build.gradle есть три разные версии Kotlin: 1.2.51, 1.1.51 и 1.3.0-rc. Пожалуйста, измените все места, чтобы использовать одну и ту же версию, тогда все будет скомпилировано правильно. Также убедитесь, что используемый вами подключаемый модуль IDE также имеет версию 1.3 RC.   -  person yole    schedule 28.10.2018
comment
@yole, я обновляю плагин Kotlin (сейчас это последняя версия: 1.2.71-release-IJ2018.2-1), но в любом случае последняя языковая версия, которую можно выбрать, — 1.2, а не 1.3... Значит ли это, что единственный способ использовать Kotlin 1.3 — установить новую версию IntelliJ IDEA?   -  person Ksenia    schedule 28.10.2018
comment
Чтобы установить предварительную версию плагина Kotlin, выберите «Инструменты» → «Kotlin» → «Настроить обновления плагина Kotlin», выберите «Early Access Preview 1.3» в раскрывающемся списке «Канал обновления» и нажмите «Проверить наличие обновлений». Обратите внимание, что вам по-прежнему не нужно изменять настройки IDEA вручную; если все версии указаны правильно, сборка Gradle будет работать и настройки будут синхронизированы.   -  person yole    schedule 28.10.2018
comment
Наконец, я обновил плагин Kotlin, и пример был выполнен успешно, но IntelliJ IDEA все равно подчеркивает ключевые слова запуска и задержки красным цветом.   -  person Ksenia    schedule 28.10.2018


Ответы (3)


Убедитесь, что вы обновили Kotlin до версии 1.3. Вы можете сделать это с Preference->Lanugage & Framework->Kotlin Updates

Затем измените версию плагина kotlin.jvm на 1.3.0 в gradle. (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'
}

Теперь все должно быть в порядке.

person Suryavel TR    schedule 31.10.2018

Вы должны изменить версию плагина 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
     }
}
person Kourosh    schedule 30.10.2018

Я решил это, вручную обновив плагин Kotlin-IntelliJ.

Сначала загрузите более новую версию плагина Kotlin, совместимую с вашей версией IntelliJ https://plugins.jetbrains.com/plugin/6954-kotlin/versions/stable

Затем в настройках IntelliJ -> Плагины щелкните значок настроек / шестеренки в правом верхнем углу. Оттуда выберите Установить плагин с диска..., выберите zip-файл, полученный с веб-сайта intellij. Затем он попросит вас перезапустить IDE, и все :)

person Sofia    schedule 23.09.2020