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
用于制作可执行文件。
在使用 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
用于制作可执行文件。