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

如何将多模块KMP库的源码合并为单个源码Jar包?

解决KMP多模块合并Jar的问题

直接通过Gradle插件或手动配置Jar任务就能解决,分两种场景说明:

场景1:合并编译后的字节码到一个Jar

  1. 引入Shadow插件
    在第一个库的build.gradle.kts的plugins块中添加:
plugins {
    kotlin("multiplatform")
    id("com.github.johnrengelman.shadow") version "8.1.1" // 可替换为最新稳定版
}
  1. 配置ShadowJar任务
    添加以下配置,指定打包时包含第二个模块的代码:
tasks.withType<ShadowJar> {
    // 包含目标依赖模块
    dependencies {
        include(project(":second_kpm_lib"))
    }
    // 自定义Jar文件名(可选)
    archiveFileName.set("combined-kmp-lib.jar")
    // 处理重复服务文件,避免打包冲突(可选)
    mergeServiceFiles()
    // 明确基于JVM编译产物打包(KMP需指定目标平台)
    from(tasks.named("jvmMainClasses"))
}
  1. 执行打包命令
    运行./gradlew :first_kpm_lib:shadowJar,生成的合并Jar会在first_kpm_lib/build/libs/目录下。

场景2:合并源码到一个源码Jar

如果需要把两个模块的源码打包成一个sources Jar,配置jvmSourcesJar任务即可:

tasks.named<Jar>("jvmSourcesJar") {
    // 引入第二个模块的源码Jar内容
    from(project(":second_kpm_lib").tasks.named<Jar>("jvmSourcesJar").map { it.outputs.files })
    // 自定义源码Jar文件名(可选)
    archiveFileName.set("combined-kmp-lib-sources.jar")
}

运行./gradlew :first_kpm_lib:jvmSourcesJar即可生成合并后的源码Jar。

注意事项

  • 确保两个KMP模块的JVM目标配置一致,避免编译冲突
  • 若不想用Shadow插件,也可直接给jvmJar任务添加from配置引入第二个模块的jvmJar产物,但Shadow插件更适合处理复杂依赖合并场景

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 22:34:56