簡體   English   中英

使用 Gradle 在 IntelliJ 中具有多個源集的 2 個項目的未解決依賴項

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM