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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 22:01:17