javascript - 使用 Gradle 在 IntelliJ 中使用多个源集的 2 个项目 Unresolved 依赖关系

标签 javascript intellij-idea kotlin jvm

我正在尝试在 Gradle 中使用通用的 Kotlin 源代码集和 2 个用于 JS 和 JVM 的特定源代码集。我知道有一个 kotlin-multiplatform 插件,但我想尝试一下是否可以进行这样的设置。它通过从命令行运行 gradle 来工作,但 IntelliJ 提示说无论是在 JS 还是在 JVM 项目中(永远不会同时),它都找不到公共(public)类。

我的目录结构如下:

- 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")
}

JVM

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 有关平台和期望-实际匹配的信息。这是在平台之间共享代码的推荐方式。

关于javascript - 使用 Gradle 在 IntelliJ 中使用多个源集的 2 个项目 Unresolved 依赖关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57556627/

相关文章:

javascript - 当模态框在前面时,如何使其他表单元素可点击?

javascript - 如何在不创建 DOM 条目的情况下使用 v-for?

javascript - iScroll 库 - 到达页面末尾 - 回调或绑定(bind)?

java - 为什么我不能在scenebuilder中选择JFXTextfield并添加它

macos - OS X 上 IntelliJ 上的 JUnit - 无法分配请求的地址

intellij-idea - 如何让 IntelliJ 将 Gradle 源与 build.gradle 关联?

android - 使用 androids 可视化器类获取可变频率范围

android - 在 Kotlin 中将时间戳值转换为 12/24 小时时间值

javascript - onDrop (javascript) 更改 css

kotlin - 在全新构建(Windows 10)上通过 intellij 运行 example-cordapp 时出现问题