Gradle如何同时构建两个多模块项目或引用其他项目的模块?
错误原因
你遇到的报错核心是Gradle的项目识别规则冲突:你尝试引入的子模块目录下自带独立的settings.gradle文件,Gradle默认会将包含settings.gradle的目录判定为独立项目根,不会将其识别为上层根项目的子模块,因此构建时根项目无法索引到你声明的子模块,触发如下报错:
Project 'MyProject' not found in root project 'MyProject'.
场景1:合并同仓库下的多个带独立配置的模块共同构建
针对你当前操作的polkaj项目场景,按如下步骤操作即可实现主库+示例模块共同构建:
- 第一步:清理子模块的独立项目标识
进入你要引入的6个examples子模块的目录,将每个目录下的settings.gradle(Gradle KTS对应为settings.gradle.kts)重命名为settings.gradle.disabled或直接删除,取消其独立项目标识,Gradle就会将其识别为上层根项目的子模块。 - 第二步:调整根项目settings.gradle配置
你现有的子模块引入逻辑基本正确,补充根项目名称声明避免名称冲突即可,完整配置示例如下:
// 根项目settings.gradle 配置 rootProject.name = 'polkaj-root' // 引入示例子模块 include(':balance') project(':balance').projectDir = file('examples/balance') include(':encoding') project(':encoding').projectDir = file('examples/encoding') include(':keys') project(':keys').projectDir = file('examples/keys') include(':rpc') project(':rpc').projectDir = file('examples/rpc') include(':runtime-explorer') project(':runtime-explorer').projectDir = file('examples/runtime-explorer') include(':types') project(':types').projectDir = file('examples/types')
- 第三步:配置子模块依赖
如果示例子模块需要依赖主库的功能,直接在子模块的build.gradle中声明项目依赖即可,示例如下:
dependencies { // 替换为实际的主库模块名即可 implementation project(':polkaj-common') }
场景2:引用外部其他独立Gradle项目的模块
如果你要引入的模块本身是外部独立项目,不需要修改其原有配置,可以使用Gradle复合构建功能实现:
- 第一步:在根项目的
settings.gradle中添加includeBuild声明,指向外部独立项目的根目录:
// 路径支持本地相对路径或绝对路径 includeBuild '../path-to-external-polkaj'
- 第二步:在需要依赖外部项目模块的
build.gradle中直接声明对应模块的maven坐标即可,Gradle会自动匹配复合构建中的本地项目,优先使用本地构建产物而非远程依赖:
dependencies { // 替换为外部项目对应模块的实际坐标和版本 implementation 'io.emeraldpay.polkaj:polkaj-rpc:0.12.0' }
内容的提问来源于stack exchange,提问作者Paul Verest on LinkedIn
相关产品推荐
相关产品推荐

