Spring Boot 2.5.2打包如何仅生成可执行jar排除plain.jar?
Spring Boot 2.5+ Gradle打包仅保留可执行Jar配置方案
Spring Boot 2.5及以上版本的官方Gradle插件默认会同时触发bootJar和jar两个打包任务:
bootJar生成带内嵌容器、可直接运行的胖Jar,默认无分类器后缀jar生成普通Java库Jar,默认添加plain分类器后缀
你之前的配置将普通jar任务的archiveClassified设为空,会导致两个任务的输出文件名完全一致,普通Jar会覆盖掉bootJar生成的可执行Jar,因此最终得到的Jar失去可执行属性。
如果你的项目仅作为独立可执行服务部署,不需要作为依赖被其他项目引用,直接禁用普通jar任务即可,以下是不同DSL的配置方案:
Gradle Groovy DSL 配置(build.gradle)
// 直接禁用普通jar任务 jar { enabled = false } // 可选:自定义可执行Jar的文件名属性 bootJar { archiveBaseName.set("your-custom-app-name") archiveVersion.set("1.0.0") }
Gradle Kotlin DSL 配置(build.gradle.kts)
tasks.getByName<Jar>("jar") { enabled = false } tasks.getByName<org.springframework.boot.gradle.tasks.bundling.BootJar>("bootJar") { archiveBaseName.set("your-custom-app-name") archiveVersion.set("1.0.0") }
验证效果
配置完成后执行./gradlew build或者单独执行./gradlew bootJar任务,在build/libs目录下只会生成1个可执行Jar包,不会再出现带-plain后缀的普通Jar包,生成的Jar可以直接通过java -jar xxx.jar命令启动。
内容的提问来源于stack exchange,提问作者Harvinder Singh
相关产品推荐
相关产品推荐

