多模块Gradle项目发布Artifactory依赖解析失败与-plain后缀去除问题
问题原因
- 根目录
build.gradle的allprojects块给所有模块都应用了org.springframework.boot插件,从Spring Boot 2.5版本开始,该插件默认会构建两类jar包:- 可执行fat jar:包名不带后缀,包含项目所有依赖和启动引导类,无法作为普通依赖被其他项目引入
- 普通Java库jar:包名带
-plain后缀,仅包含当前模块编译后的类文件,可作为依赖引入
- 你当前的Maven发布配置里使用
from(components.java),默认发布的是带-plain后缀的普通jar,但pom/module元数据里没有配置对应的classifier,导致其他项目依赖时找不到无后缀的jar包,因此解析失败。
解决方法
推荐优先使用方案1,改造成本最低:
方案1:仅调整API模块配置
在admin-api模块的build.gradle中添加如下配置,禁用Boot插件的可执行jar构建逻辑,同时去掉普通jar的-plain后缀:
bootJar { enabled = false // 公共依赖模块不需要打可执行jar,直接禁用 } jar { enabled = true archiveClassifier = '' // 移除plain后缀 }
修改后重新执行artifactoryPublish任务,上传的jar就会变为admin-api-0.0.2-RC3.jar,其他项目的依赖声明不需要任何修改即可正常解析。
方案2:调整全局配置
如果你的项目中只有少数模块是可启动的Spring Boot应用,其余都是公共依赖模块,可以把allprojects块里的apply plugin: 'org.springframework.boot'配置移到具体的应用模块build.gradle中,公共模块不需要应用该插件,自然不会生成带-plain后缀的jar。
临时兼容方案
如果暂时不想修改发布配置,也可以在依赖时指定classifier为plain即可正常拉取:
dependencies { compileOnly('com.example:admin-api:0.0.2-RC3:plain') }
内容的提问来源于stack exchange,提问作者Chirag
相关产品推荐
相关产品推荐

