我在做一个多平台的项目。
我的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")
}
}
...
}
}
现在,在CommonsMain源代码中,我得到了一个IDE错误(红色下划线),指出“预期的类样本在apiMain中没有实际声明”,但apiMain依赖于具有实际声明的jvmMain。
我认为我不需要apiMain中的实际声明,因为我在JVM中已经有了一个声明。
我应该采取不同的方法来设置我的源集吗?
无论如何,项目编译得很好,我可以运行apiMain,但IDE错误真的让我很恼火。
3条答案
按热度按时间46scxncf1#
这是一个已知的IDE错误。请参阅YouTrack票证here。
目前,您可以使用
@Suppress("NO_ACTUAL_FOR_EXPECT")
来消除IDE中的警告。不过,我并不建议您这样做,因为如果您缺少任何actual
实现,您将得到运行时崩溃,而不是编译时错误。esyap4oy2#
它们应该在相同的包名下。
还要检查您的包名称是否与您收到错误的包名称相同
预期的类样本在apiMain中没有实际声明
你需要把包裹送到邮局去。
在我的例子中,我有
,我必须在资源
中创建这两个文件夹
c0vxltue3#
在我的例子中,结果是我的“.dea”文件夹中的某些内容被损坏了。我关闭了Android Studio,从我的项目根目录中删除了该目录,然后重新打开了项目。系统会自动重新创建.IDEA文件,我的问题也就解决了。
我之所以明白这一点,是因为使用向导创建新的KMM应用程序不会出现与使用Expect/Actual类相同的错误。