预期的类没有实际声明

Agu*_*orn 4 intellij-idea kotlin gradle-kotlin-dsl kotlin-multiplatform

我正在做一个多平台项目。

我的 gradle 文件的一部分看起来像这样

...
kotlin {
    jvm()
    jvm("api")
    js()
    mingwX64("mingw")
    sourceSets {
        ...
        val jvmMain by getting {
            dependencies {
                implementation ("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
            }
        }
        val jvmTest by getting {
            dependencies {
                implementation ("org.jetbrains.kotlin:kotlin-test")
                implementation ("org.jetbrains.kotlin:kotlin-test-junit")
            }
        }
        val apiMain by getting {
            dependencies {
                dependsOn(jvmMain)
            }
        }
        val jsMain by getting {
            dependencies {
                implementation ("org.jetbrains.kotlin:kotlin-stdlib-js")
            }
        }
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

现在在 commonsMain 源中,我收到一个 IDE 错误(红色下划线),上面写着“预期的类 Sample 在 apiMain 中没有实际声明”,但 apiMain 依赖于具有实际声明的 jvmMain。

我认为我不需要在 apiMain 中进行实际声明,因为我已经在 jvm 中进行了声明。

我应该采取不同的方法来设置我的源集吗?

无论如何,项目编译得很好,我可以运行 apiMain,但是 IDE 错误真的让我很恼火。

Bru*_*let 6

这是一个已知的 IDE 错误。在此处查看 YouTrack 票证。

现在,您可以使用@Suppress("NO_ACTUAL_FOR_EXPECT")来消除 IDE 中的警告。不过我真的不推荐它,因为如果你缺少任何actual实现,你会得到运行时崩溃而不是编译时错误。