Gradle依赖异常::state:api被替换为:bus:api致构建失败求助
Gradle 4.7 独立子项目被误视为同一项目的问题解决
我之前也碰到过类似的Gradle依赖替换问题,结合你给出的配置和依赖输出,问题的根源其实很清晰:
问题原因
Gradle 在识别项目模块时,是基于**group:name:version 三元组**来判断两个项目是否为同一模块的。而你的两个子项目:
:bus:api:默认项目name是api(取自目录名),group为kic,version是1.0-SNAPSHOT:state:api:同样默认项目name是api,group和version也和前者完全一致
这就导致Gradle认为这两个项目是同一个模块,自动将:state:api替换成了先被识别的:bus:api,最终类路径里只有bus api的代码,自然会出现依赖不满足的构建失败。你修改rootProject.name没用,是因为这个配置不影响子项目的group:name:version核心标识。
解决方案
只需要让两个子项目的group:name:version三元组唯一即可,有两种简单的实现方式:
方式1:给子项目设置唯一的name属性
在bus/api/build.gradle中添加:
name = 'bus-api'
在state/api/build.gradle中添加:
name = 'state-api'
这样两个项目的标识就变成了kic:bus-api:1.0-SNAPSHOT和kic:state-api:1.0-SNAPSHOT,Gradle就不会再把它们视为同一模块了。
方式2:修改子项目的group属性
在bus/api/build.gradle中修改group:
group 'kic.bus'
在state/api/build.gradle中修改group:
group 'kic.state'
这种方式下,即使项目name都是api,但group不同,三元组依然唯一,同样能解决问题。
验证修复
执行你之前的依赖命令验证:
./gradlew server:dependencies --configuration compile | grep project
如果输出中不再出现-> project :bus:api的替换标记,而是正常显示:state:api,就说明修复成功了。
内容的提问来源于stack exchange,提问作者KIC
相关产品推荐
相关产品推荐

