我正在尝试将 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
.
现在我尝试将项目导入到另一个项目中
I use git submodule add
to add MyLibrary
to 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')
to this:
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')
预先感谢您的任何帮助