Android - 使用git子模块的最佳方式

时间:2017-09-01 06:01:20

标签: git git-submodules

让我假设一个项目 App 有4个外部模块: ModA ModB ModC ModD ,可以由其他项目以可重复使用的方式使用。

该项目背后的想法是将项目与内部git子模块链接到名为“modules”的文件夹中。

例如,相关的settings.gradle可能是:

include ':app'
include ':modules:ModA'
include ':modules:ModB'
include ':modules:ModC'
include ':modules:ModD'

并且所有这些.gitmodules文件都可以正常工作:

[submodule "modules/ModA"]
    path = modules/ModA
    url = ssh://git@bitbucket.org/repo/ModA.git
[submodule "modules/ModB"]
    path = modules/ModB
    url = ssh://git@bitbucket.org/repo/ModB.git
[submodule "modules/ModC"]
    path = modules/ModC
    url = ssh://git@bitbucket.org/repo/ModC.git
[submodule "modules/ModD"]
    path = modules/ModD
    url = ssh://git@bitbucket.org/repo/ModD.git

现在,假设ModA与ModC和ModD有依赖关系,连接它们的最佳方法是什么?使用ModC和ModD向ModA添加子子模块,或者在maven上部署ModC和ModD的工件并将它们用作依赖项?

模块的树

  • 应用
    • MODA
      • MODC
      • MODD
    • ModB
    • ModC
    • MODD

问题

如果应用程序需要更改为ModC,则更改仅影响模块/ ModC到App模块目录。 ModA(具有类似模块的ModC)看不到任何变化。

你有什么想法吗?我怎样才能处理一次更改?

我对这个论点有点困惑。

1 个答案:

答案 0 :(得分:2)

选项1)使用maven工件是这里的方法。 为了简化本地开发,您可以使用Gradle Composite Builds(自Gradle 3.1)https://docs.gradle.org/current/userguide/composite_builds.html来替换工件依赖项,这些构建项目的本地项目彼此相邻。

根据Gradle文档,这应该将项目依赖项替换为项目依赖项,并大大简化您的开发。

选项2)git子模块: 假设最终目录结构如:

App/{build.gradle,settings.gradle}
App/modules/ModA/{build.gradle,settings.gradle}
App/modules/ModA/modules/ModC/
App/modules/ModC/{build.gradle,settings.gradle}

App/build.gradle:参考模块就像普通项目一样

dependencies {
    compile project(':ModA')
    compile project(':ModC')
}

App/settings.gradle:包括子项目,如:

include 'ModA'
project(':ModA').projectDir = new File('modules/ModA')
include 'ModC'
project(':ModC').projectDir = new File('modules/ModC')

App/modules/ModA/build.gradle正常的项目引用就像上面那样

dependencies {
    compile project(':ModC')
}

App/modules/ModA/settings.gradle这里重要的部分是使用与上面相同的项目名称

include 'ModC'
project(':ModC').projectDir = new File('modules/ModC')

在目录结构中,您注意到App/modules/ModA/modules/ModC/,其中包含ModC源的未使用副本,假定ModA也将使用子模块来管理依赖项。