JVM 目标无法在 Kotlin 多平台项目中导入常见的 类

JVM target unable to import common classes in Kotlin multiplatform project

在使用 Android 和 iOS 应用程序正常运行的 KMM 项目之后。我尝试在项目中添加一个新的目标JVM来实现一个基本的后端服务。

我已经在其他项目中看到过这种工作方式,例如 https://github.com/joreilly/PeopleInSpace 但即使我认为它一定就在我面前,我也无法分辨出它与这个的区别。

我创建了一个示例项目来重现它:https://github.com/RafaO/Surf您可以查看它并在 JVM 客户端中看到 class Greeting 未找到。

感谢任何关于为什么会发生这种情况的想法。

非常感谢!

我不确定这是否是唯一的方法,但我正在使用具有单个 jvm 源集的多平台后端模块。

我用作参考的示例:https://github.com/JetBrains/kotlinconf-app

我自己的设置:

plugins {
    kotlin("multiplatform")
    kotlin("plugin.serialization")
    id("com.squareup.sqldelight")
    application
    id("com.github.johnrengelman.shadow") version "7.0.0"
}

application {
    mainClass.set("io.ktor.server.netty.EngineMain")
    @Suppress("DEPRECATION")
    mainClassName = mainClass.get()
}

sqldelight {
    database("Database") {
        packageName = "com.app.server"
        dialect = "mysql"
    }
}

kotlin {
    jvm {
        withJava()
    }
    sourceSets {
        val jvmMain by getting {
            dependencies {
                implementation(project(":common"))
                // ...
            }
        }
    }
}

tasks.withType<Jar> {
    manifest {
        attributes(
            mapOf(
                "Main-Class" to application.mainClass.get()
            )
        )
    }
}

tasks.named<AbstractCopyTask>("jvmProcessResources") {
    duplicatesStrategy = DuplicatesStrategy.WARN
}

目标 run 用于调试,shadowJar 用于制作可执行文件。