猿问

如何将 gradle 多项目存储库作为 git 子模块包含在另一个 gradle 项目中

我正在尝试将 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 存储库获取代码。


我觉得如果以下声明是有效的,它可以解决我的问题:


implementation project(':mylibrary:lib-api:api-config').ifNotPresent(':lib-api:api-config')

预先感谢您的任何帮助


繁星点点滴滴
浏览 105回答 1
1回答

幕布斯7119047

经过一次精彩的发现后,我意识到文件中允许使用 java 代码build.gradle,所以我很自然地这样做了:dependencies {    if (rootProject.getName().equals("MyLibrary")) {        implementation project(':lib-api:api-config')    } else {        implementation project(':mylibrary:lib-api:api-config')    }}
随时随地看视频慕课网APP

相关分类

Java
我要回答