Spring Boot 2.5.2升级:自定义Starter的Plain Jar与常规Jar依赖冲突
问题解决方案
核心问题原因
Spring Boot Gradle插件默认会生成两种jar:一种是plain jar(仅包含项目编译后的类文件,无特殊结构),另一种是可执行boot jar(包含BOOT-INF目录,内置依赖和类加载器)。你的自定义Starter和依赖项目之间的jar类型不匹配,导致依赖解析时出现“找错jar”的情况。
解决方案一:统一jar类型(推荐)
1. 让自定义Starter仅生成plain jar(Starter标准用法)
Starter本质是普通依赖模块,应使用plain jar。在Starter项目的build.gradle中禁用可执行boot jar的生成:
bootJar { enabled = false } jar { enabled = true }
执行gradle install将plain jar安装到本地仓库后,依赖项目直接引入该Starter即可,Gradle会默认解析plain jar,无需额外配置。
2. 强制依赖项目指定jar类型(仅特殊场景用)
如果必须使用可执行boot jar,需在依赖项目的build.gradle中明确指定classifier为boot:
implementation('com.yourgroup:your-starter:1.0.0') { artifact { classifier = 'boot' } }
⚠️ 注意:可执行boot jar的类路径结构特殊,作为依赖引入可能导致类加载异常,不推荐用于Starter场景。
解决方案二:同时安装两种jar(不推荐,易混淆)
通过给不同jar设置classifier,可同时安装到本地仓库。在Starter项目的build.gradle中配置:
jar { classifier = 'plain' } bootJar { classifier = 'boot' }
执行gradle install后,本地仓库会同时存在带plain和boot标识的jar。依赖项目需明确指定要依赖的类型:
// 依赖plain jar implementation('com.yourgroup:your-starter:1.0.0:plain') // 依赖boot jar implementation('com.yourgroup:your-starter:1.0.0:boot')
关键注意事项
- 优先使用plain jar作为Starter的发布包,这是Spring Boot Starter的标准规范。
- 清理本地Maven仓库中该Starter的旧版本缓存(路径一般为
~/.m2/repository/com/yourgroup/your-starter/),避免缓存导致的解析异常。 - 检查依赖项目的
dependencyManagement配置,确保未强制给该Starter设置错误的classifier规则。
内容的提问来源于stack exchange,提问作者Rhmn61
相关产品推荐
相关产品推荐

