让我假设一个项目 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的工件并将它们用作依赖项?
如果应用程序需要更改为ModC,则更改仅影响模块/ ModC到App模块目录。 ModA(具有类似模块的ModC)看不到任何变化。
你有什么想法吗?我怎样才能处理一次更改?
我对这个论点有点困惑。
答案 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也将使用子模块来管理依赖项。