[英]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.