如何执行Kotlin Multiplatform JAR?解决无Main-Class清单项问题
解决Kotlin Multiplatform Web应用JAR无Main-Class的问题
问题原因
你当前执行的shoppinglist-jvm-1.0-SNAPSHOT.jar是Gradle默认生成的编译产物JAR,只包含项目自身的代码文件,既没打包依赖库,也没在清单中配置Main-Class,所以无法直接用java -jar运行。你解压看到的内部tar/zip归档,其实是application插件生成的可执行分发包,正常情况下应该输出到distributions目录,而非打包进编译JAR。
解决方案
1. 配置JVM模块的Gradle脚本
在你的KMP项目的jvm模块对应的build.gradle.kts中添加以下配置:
// 1. 启用application插件,用于生成可执行分发包 plugins { // 保留原有插件(如kotlin("jvm")、id("io.ktor.plugin")等) application } // 2. 指定你的主类全限定名(替换成你项目中带main函数的类路径,比如com.example.Application) application { mainClass.set("你的主类全限定名") } // 可选:如果需要单JAR包含所有依赖(胖JAR),添加shadow插件 plugins { id("com.github.johnrengelman.shadow") version "7.1.2" // 版本可根据Gradle版本调整 } shadowJar { mergeServiceFiles() manifest { attributes["Main-Class"] = application.mainClass.get() } }
2. 构建并运行可执行产物
方式一:用application插件生成分发包
执行Gradle命令:./gradlew jvm:distZip生成的zip包会在
jvm/build/distributions目录下,解压后找到bin文件夹里的启动脚本(Windows是.bat,Linux/macOS是.sh),直接运行脚本即可启动应用。方式二:用shadow插件生成胖JAR
执行Gradle命令:./gradlew jvm:shadowJar生成的可执行胖JAR在
jvm/build/libs目录下,文件名通常带-all后缀,直接用以下命令运行:java -jar shoppinglist-jvm-1.0-SNAPSHOT-all.jar
针对Jetbrains示例项目的说明
你用到的Ktor全栈示例默认未配置application插件,所以需要按上述步骤手动添加配置,找到项目中带有main函数的类(比如Application.kt),填入其全限定名即可解决问题。
内容的提问来源于stack exchange,提问作者Andavin
相关产品推荐
相关产品推荐

