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

如何执行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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 22:15:38