gradle 为什么我需要在我的Kotlin多平台项目中将main函数放在jvmMain中?

m528fe3b  于 2023-01-17  发布在  Kotlin
关注(0)|答案(1)|浏览(164)

我决定将我的所有src/main/java目录重命名为src/main/Kotlin,在这样做的同时,我注意到我的主模块的代码在src/jvmMain/java中,所以我将它移到了src/commonMain/kotlin(我想为什么不呢?),一切都很好,一切都解决了。但是在重新启动IDE之后,当启动我的项目时,出现了一些问题:
错误:无法找到或加载主类MainKt
原因:java.lang.类未找到异常:主要Kt
build.gradle.kts

我通过将main函数移到jvmMain来解决;现在看起来是这样的:

fun main() = application { App() }

,为什么将其放在commonMain中会破坏所有内容?

  • commonMain中的文件警告我
    “上下文接收器”功能是试验性的,应显式启用
    ,但同时在jvmMain的代码中没有问题,因为我已经为它添加了一个required标志,我认为这个问题与主要问题有关。
    纯粹的问题:为什么没有解决将app的main函数放在commonMain模块而不是jvmMain模块的问题?
wd2eg0qa

wd2eg0qa1#

经过更多的研究,我对这些模块的结构得出了结论,commonMain模块包含共享代码(如kmm中的shared模块),将由项目的平台特定模块和jvmMain模块使用,jvmMain模块用于调用应用程序的main()函数,这就是为什么main()函数必须放置在jvmMain模块中。
这意味着将所有程序代码放入commonMain模块是错误的决定;相反,我必须只放置共享组件,例如MaterialTheme颜色和填充。
dependencies diagram

相关问题