如何在Gradle项目中引用另一个项目的本地版本作为依赖
解决方案:使用Gradle复合构建(Composite Builds)
Gradle的复合构建正好能满足你的需求——无需推送项目B到远程,让A直接引用本地修改后的B,同时完整保留B的传递性依赖,且不会将B转为A的子项目。具体操作如下:
1. 配置项目A的settings.gradle
在项目A的settings.gradle文件中添加以下配置,引入本地的项目B:
// 替换为你本地项目B的实际路径,支持绝对路径或相对路径(比如../projectB) includeBuild('/your/local/path/to/projectB') { dependencySubstitution { // 替换A中原本依赖的B坐标为本地项目 // 这里的com.example:projectB要和A的build.gradle里依赖B的坐标完全一致 substitute module('com.example:projectB') with project(':projectB') } }
2. 验证效果
配置完成后,直接在项目A中执行构建命令(比如./gradlew build),Gradle会自动先构建本地的项目B,然后用B的构建产物参与A的构建,同时完整保留B的所有传递性依赖,和你依赖远程版本的B时的依赖处理逻辑完全一致。
3. 处理依赖锁定
因为你使用了Gradle依赖锁定,需要注意:
- 启用复合构建后,Gradle会优先使用本地的B,忽略锁定文件中记录的远程版本,无需修改锁定文件即可验证B的本地修改
- 当你确认B的修改没问题,需要发布正式版本时,只需注释掉
settings.gradle中的includeBuild配置,然后按原有流程更新A中B的版本号,重新执行./gradlew generateLock saveLock即可
关键优势
- 无需推送B到远程CI发布,本地修改实时生效
- 保留B的传递性依赖,依赖冲突解决逻辑和正常构建完全一致
- 两个项目仍属于独立Git仓库,不会被合并为子项目
- 完全避开本地JAR、合并JAR的弊端
内容的提问来源于stack exchange,提问作者Swaranga Sarma
相关产品推荐
相关产品推荐

