繁体   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