Gradle构建Spring Boot:生成含/不含资源的瘦Jar与胖Jar
解决方案
你不需要修改全局的processResources任务(这会同时影响可执行Jar和瘦Jar的资源),而是分开配置两个Jar任务:
1. 保留Spring Boot默认的可执行胖Jar
Spring Boot的bootJar任务默认会自动生成包含所有依赖、编译后的类文件以及resources目录内容的可执行胖Jar,无需额外修改,执行./gradlew bootJar即可生成。
2. 配置用于依赖的瘦Jar
你可以通过两种方式实现瘦Jar的生成:
方式一:修改默认jar任务生成瘦Jar
修改默认的jar任务,让它只包含编译后的class文件,排除resources目录内容:
tasks.jar { // 仅包含源码编译后的class文件 from sourceSets.main.java.outputDir // 移除默认的资源输入,避免包含resources目录 sourceSets.main.resources.srcDirs = [] }
执行./gradlew jar会生成瘦Jar(路径:build/libs/[项目名].jar),而bootJar生成的可执行Jar不受影响。
方式二:创建自定义瘦Jar任务(推荐)
如果不想改动默认jar任务,可以创建一个独立的自定义任务,生成带标识的瘦Jar:
// 自定义瘦Jar任务,后缀为-thin task thinJar(type: Jar) { archiveClassifier.set('thin') // 仅包含编译后的class文件 from sourceSets.main.java.outputDir // 若需要保留特定资源,可添加include规则,例如:include 'config/*.properties' } // 让assemble任务自动触发thinJar生成 assemble.dependsOn(thinJar)
执行./gradlew assemble或./gradlew thinJar会生成build/libs/[项目名]-thin.jar,这个Jar仅包含class文件,可直接作为其他项目的依赖。
关键说明
- 不要修改全局的
processResources任务,bootJar依赖该任务来将resources目录内容打包进可执行Jar。 - 若需要给瘦Jar添加部分资源,可在对应Jar任务中添加
include规则,例如include 'META-INF/*.xml'来保留特定文件。
内容的提问来源于stack exchange,提问作者Samrat 11
相关产品推荐
相关产品推荐

