我正在尝试将 Gradle 多项目存储库作为 git 子模块导入另一个 Gradle 项目。
这是多项目回购的结构:
MyLibrary
- lib-api
- api-config
- api-repository
- lib-impl
- impl-config
- impl-repository
在 Gradle 项目MyLibrary中,有几个模块依赖于该项目中的其他模块。例如,lib-api:api-repository具有以下依赖项:
implementation project(':lib-api:api-config')
(下面的模块lib-impl还包括它们各自的 api 作为依赖项)
到目前为止一切正常,我可以在lib-impl.
现在我尝试将项目导入另一个项目
我git submodule add用来添加MyLibrary到MyProject. 这是现在的结构:
MyProject
- MyLibrary
- lib-api
- api-config
- api-repository
- lib-impl
- impl-config
- impl-repository
- api
- impl
为了能够使用 下的模块MyLibrary,我将settings.gradle文件编辑为MyProject如下所示:
rootProject.name = 'MyProject'
include 'api'
include 'impl'
include 'mylibrary'
include 'mylibrary:lib-api'
include 'mylibrary:lib-impl'
include 'mylibrary:lib-api:api-config'
include 'mylibrary:lib-api:api-repository'
include 'mylibrary:lib-impl:impl-config'
include 'mylibrary:lib-impl:impl-repository'
问题
既然下面的模块都MyLibrary属于根项目MyProject,那么里面所有的内部依赖都MyLibrary需要加上前缀:mylibrary。但只有MyLibrary当前是另一个项目的子模块时才会出现这种情况。
为了构建MyProject,我需要MyLibrary从这里更改依赖项:
implementation project(':lib-api:api-config')
implementation project(':lib-api:api-repository')
对此:
implementation project(':mylibrary:lib-api:api-config')
implementation project(':mylibrary:lib-api:api-repository')
但是,:mylibrary不需要存在MyLibrary才能自行成功编译(即,如果MyLibrary是根项目)。MyLibrary但是这种更改是作为子模块工作所必需的。
这曾经不是一个大问题,因为我总是可以拉出子模块MyLibrary并编辑必要的build.gradle文件。但是,我现在已经开始尝试设置持续集成,并且MyLibrary每当我尝试构建时,我都会收到有关这些导入无效的错误,MyProject因为 CI 总是会直接从 git repo 获取代码。
我觉得如果以下陈述有效,它可以解决我的问题:
implementation project(':mylibrary:lib-api:api-config').ifNotPresent(':lib-api:api-config')
提前感谢您的帮助