[英]Uunresolved dependencies with 2 projects with multiple sourcesets in IntelliJ with Gradle
我正在尝试在 Gradle 中为 JS 和 JVM 使用一个通用的 Kotlin 源集和 2 个特定的源集。 我知道有一个kotlin-multiplatform
插件,但我想尝试一下是否可以进行这样的设置。 它通过gradle
运行gradle
来工作,但 IntelliJ 抱怨无论是在 JS 还是在 JVM 项目中(永远不会同时)它无法找到公共类。
我的目录结构如下:
- common
- src/main/kotlin/MyLibrary.kt
- js
- build.gradle.kts
- src/main/kotlin/JsDemo.kt
- jvm
- build.gradle.kts
- src/main/kotlin/JvmDemo.kt
这里的 Jsdemo 和 JvmDemo 无非是:
fun main() {
MyLibrary().sayHello()
}
构建脚本是这样的
JS
plugins {
id("kotlin2js") version "1.3.41"
}
repositories {
jcenter()
}
dependencies {
implementation(kotlin("stdlib-js"))
}
sourceSets["main"].withConvention(KotlinSourceSet::class) {
kotlin.srcDir("../common/src/main/kotlin")
}
虚拟机
plugins {
kotlin("jvm") version "1.3.41"
}
repositories {
jcenter()
}
dependencies {
implementation(kotlin("stdlib-jdk8"))
}
sourceSets {
main {
withConvention(KotlinSourceSet::class) {
kotlin.srcDir("../common/src/main/kotlin")
}
}
}
从命令行运行任务时,一切正常。 但是,在 IntelliJ 中,无法为其中一个项目解析 MyLibrary()。 它是哪个项目取决于我首先打开哪个项目。 如果我先打开 JsDemo,它就会出现 JvmDemo 的问题,反之亦然。
知道是什么导致了这个问题吗?
IntelliJ IDEA 在很大程度上依赖于这样一个事实,即作为单个模块的一部分和单个上下文(平台、依赖项、语言设置等),单个源文件只能被分析一次。 如果这个假设不成立,它仍然会分析源文件一次,并且不会对包含该文件的其他模块进行分析。 这会导致你得到的行为。 不支持在多个 IDE 模块中包含单个源文件。
Kotlin 多平台项目通过对源进行一次实际分析来解决这个问题,但使用适当的上下文来告诉 IDE 有关平台和期望实际匹配的信息。 这是在平台之间共享代码的推荐方式。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.