You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何Kotlin多平台项目中main函数需置于jvmMain而非commonMain?

问题原因解析:commonMain中放置main函数导致找不到主类的原因
  • Kotlin多平台源码集的分工逻辑
    commonMain是用来存放所有目标平台通用的无平台依赖代码的源码集,它本身不绑定任何具体平台(比如JVM、JS、Native)。编译时,commonMain的代码会被合并到各个目标平台的编译单元,但它不会单独生成可执行的JVM字节码入口。而jvmMain是专门针对JVM平台的源码集,只有这里的代码会被编译成符合JVM规范的可执行类,包含主类入口的元数据。

  • main函数的平台绑定特性
    你写的fun main() = application { App() }中的application函数(大概率是JavaFX或Compose Desktop的API)是JVM平台专属的API。这些API在commonMain中没有实际的平台实现——虽然IDE可能通过临时缓存识别到依赖,但实际编译打包时,commonMain的代码不会被标记为JVM的主类入口,自然无法生成可被JVM识别的MainKt类。

  • IDE缓存与实际编译的差异
    一开始能正常运行是因为IDE缓存了临时编译状态,没有彻底重新构建所有源码集。重启IDE后,编译流程从头执行,commonMain的代码无法生成有效的JVM主类,就会抛出找不到主类的错误。

内容的提问来源于stack exchange,提问作者Yoloroy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 04:10:34