我们正在使用Kotlin创建一个多平台项目,某个模块的一部分使用实验性协程功能。
我们正在使用Gradle来构建项目/库。公共模块的gradle构建脚本如下:
真的没有什么特别的地方。然而,似乎存在一个问题,即协程依赖于 Kotlin 的标准库的冲突版本和我们想要在项目中使用的 Kotlin 的标准库。
除其他信息外,gradle module:dependencies 输出了一棵包含此信息的树:
正如您所看到的,该项目依赖于Kotlin版本1.2.41,但协程库在内部依赖于1.2.21。
这会导致当我使用Kotlin语言的某些结构时,IntelliJ无法识别它并显示“未解决的引用”错误: Unresolved reference error, IntelliJ 这变得非常烦人,因为几乎所有文件都被标记为包含致命错误,即使您可以毫无问题地构建它们。
在检查模块依赖项时,我发现IntelliJ确实认为该模块依赖于两个Kotlin标准库: Module dependencies in IntelliJ 我发现如果我从此列表中删除kotlin-stdlib-1.2.21依赖项,则IntelliJ将停止显示“未解决的引用”错误。不幸的是,在使用Gradle重新同步项目后,依赖关系会恢复。
有没有办法避免这个问题?
我们正在使用Gradle来构建项目/库。公共模块的gradle构建脚本如下:
apply plugin: 'kotlin-platform-common'
dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib-common:$kotlin_version"
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:0.22.5"
testCompile "org.jetbrains.kotlin:kotlin-test-annotations-common:$kotlin_version"
testCompile "org.jetbrains.kotlin:kotlin-test-common:$kotlin_version"
}
kotlin {
experimental {
coroutines "enable"
}
}
真的没有什么特别的地方。然而,似乎存在一个问题,即协程依赖于 Kotlin 的标准库的冲突版本和我们想要在项目中使用的 Kotlin 的标准库。
除其他信息外,gradle module:dependencies 输出了一棵包含此信息的树:
compileClasspath - Compile classpath for source set 'main'.
+--- org.jetbrains.kotlin:kotlin-stdlib-common:1.2.41
\--- org.jetbrains.kotlinx:kotlinx-coroutines-core:0.22.5
\--- org.jetbrains.kotlin:kotlin-stdlib:1.2.21
\--- org.jetbrains:annotations:13.0
compileOnly - Compile only dependencies for source set 'main'.
No dependencies
default - Configuration for default artifacts.
+--- org.jetbrains.kotlin:kotlin-stdlib-common:1.2.41
\--- org.jetbrains.kotlinx:kotlinx-coroutines-core:0.22.5
\--- org.jetbrains.kotlin:kotlin-stdlib:1.2.21
\--- org.jetbrains:annotations:13.0
implementation - Implementation only dependencies for source set 'main'. (n)
+--- org.jetbrains.kotlin:kotlin-stdlib-common:1.2.41 (n)
\--- org.jetbrains.kotlinx:kotlinx-coroutines-core:0.22.5 (n)
正如您所看到的,该项目依赖于Kotlin版本1.2.41,但协程库在内部依赖于1.2.21。
这会导致当我使用Kotlin语言的某些结构时,IntelliJ无法识别它并显示“未解决的引用”错误: Unresolved reference error, IntelliJ 这变得非常烦人,因为几乎所有文件都被标记为包含致命错误,即使您可以毫无问题地构建它们。
在检查模块依赖项时,我发现IntelliJ确实认为该模块依赖于两个Kotlin标准库: Module dependencies in IntelliJ 我发现如果我从此列表中删除kotlin-stdlib-1.2.21依赖项,则IntelliJ将停止显示“未解决的引用”错误。不幸的是,在使用Gradle重新同步项目后,依赖关系会恢复。
有没有办法避免这个问题?