launch 仅在 Kotlin 1.3 之后可用,不能在 Kotlin 1.2 中使用
launch is only available since Kotlin 1.3 and cannot be used in Kotlin 1.2
我正在尝试 运行 the simplest example with 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!")
}
我的 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
为什么会出现这些错误?我完全糊涂了,因为第一个错误说启动 "is only available since Kotlin 1.3 and cannot be used in Kotlin 1.2",但我在我的 build.gradle 文件中使用 Kotlin 1.3(特别是“1.3.0-rc-146”)...
UPD
问题的原因似乎是在 IntelliJ IDEA 设置中:
但是如果那里可以选择的最新语言版本是1.2而不是1.3,怎么解决呢?
您必须更改 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
}
}
确保您已将 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'
}
现在应该没问题了
我通过手动更新 Kotlin-IntelliJ 插件解决了这个问题。
首先,下载与您的 IntelliJ 版本兼容的更新版本的 Kotlin 插件 https://plugins.jetbrains.com/plugin/6954-kotlin/versions/stable
然后在 IntelliJ 的设置 -> 插件中,单击 top-right 一侧的 settings/gear 图标。从那里选择 Install Plugin from Disk...,选择您从 intellij 网站获得的 zip 文件。然后它会要求你重新启动IDE,就是这样:)
如果它最近才开始出现,那么可能是两个链接正在生成同名的同一个文件,在这种情况下,从 build.gradle
中删除您最近使用的文件之一将帮助您解决问题。
在我的例子中,这是导致问题的原因
implementation 'com.miguelcatalan:materialsearchview:1.4.0'
implementation 'com.github.Ferfalk:SimpleSearchView:0.2.0'
删除其中的第一个后,问题就解决了。
我正在尝试 运行 the simplest example with 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!")
}
我的 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
为什么会出现这些错误?我完全糊涂了,因为第一个错误说启动 "is only available since Kotlin 1.3 and cannot be used in Kotlin 1.2",但我在我的 build.gradle 文件中使用 Kotlin 1.3(特别是“1.3.0-rc-146”)...
UPD
问题的原因似乎是在 IntelliJ IDEA 设置中:
但是如果那里可以选择的最新语言版本是1.2而不是1.3,怎么解决呢?
您必须更改 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
}
}
确保您已将 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'
}
现在应该没问题了
我通过手动更新 Kotlin-IntelliJ 插件解决了这个问题。
首先,下载与您的 IntelliJ 版本兼容的更新版本的 Kotlin 插件 https://plugins.jetbrains.com/plugin/6954-kotlin/versions/stable
然后在 IntelliJ 的设置 -> 插件中,单击 top-right 一侧的 settings/gear 图标。从那里选择 Install Plugin from Disk...,选择您从 intellij 网站获得的 zip 文件。然后它会要求你重新启动IDE,就是这样:)
如果它最近才开始出现,那么可能是两个链接正在生成同名的同一个文件,在这种情况下,从 build.gradle
中删除您最近使用的文件之一将帮助您解决问题。
在我的例子中,这是导致问题的原因
implementation 'com.miguelcatalan:materialsearchview:1.4.0'
implementation 'com.github.Ferfalk:SimpleSearchView:0.2.0'
删除其中的第一个后,问题就解决了。