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

如何配置Kotlin DSL实现Spring Boot多模块项目打包为可执行JAR文件

问题原因

你自定义的fatJar任务无法打入自有代码的核心原因是引入了Spring Boot插件后,默认jar任务的输出结构会被改写为Spring Boot可执行jar的特殊结构,类文件会被放到BOOT-INF/classes路径下,你直接通过with(tasks.jar.get() as CopySpec)无法获取到正常可被普通Jar任务识别的自有代码产物。同时你同时引入了Spring Boot打包能力、Shadow插件、自定义fatJar任务,多个打包逻辑冲突也会导致产物异常。
另外你重复配置了KotlinCompile任务参数,tasks.withType<KotlinCompile>已经覆盖了所有Kotlin编译场景,单独声明的compileKotlin配置属于冗余代码可以直接删除。

解决方案

你可以选择以下任意一种方案实现需求,不需要同时保留多套打包逻辑:

方案1:使用Spring Boot自带的bootJar任务(推荐)

Spring Boot官方插件已经内置了胖包打包能力,无需自定义任务或引入Shadow插件,你只需要做以下修改:

  • 删除Shadow插件引入行:id("com.github.johnrengelman.shadow") version "5.1.0"
  • 删除你自定义的fatJar任务以及build依赖fatJar的配置
  • 直接执行./gradlew bootJar命令即可,产物会自动生成在build/libs目录下,默认已经包含所有依赖和你自己编写的代码,主类也会被自动识别无需手动配置。

方案2:使用Shadow插件打包

如果你确实需要用Shadow插件实现特殊的打包逻辑,也不需要自定义fatJar任务,修改配置如下:

  • 删除你自定义的fatJar任务以及build依赖fatJar的配置
  • 新增Shadow任务配置:
tasks.withType<com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar> {
    manifest {
        attributes["Main-Class"] = "com.example.MainApplicationKt"
    }
    mergeServiceFiles() // 用于合并Spring相关的服务配置文件,避免运行报错
}
  • 执行./gradlew shadowJar命令即可得到正确的胖包产物。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 09:09:02