依赖作为Git子模块的gradle项目的正确方法是什么?

时间:2016-04-21 15:25:54

标签: git android-studio gradle

我遇到了一个问题,试图在我的Gradle项目中包含一个Git子模块,并依赖于Git子模块中的单个Gradle模块。

子模块是一个具有以下结构的库:

MappingLib
 -BaseLib
 -AndroidLib

MappingLib的settings.gradle文件包含:

include ':BaseLib', ':AndroidLib'

并且AndroidLib的build.gradle文件包含(除其他外):

dependencies {
  ...
  compile project(':BaseLib')
  ...
}

子模块在独立开发时可以很好地构建。

然后我有另一个项目,包括MappingLib作为子模块。该项目具有以下结构:

MyCoolApp
 -app
 -MappingLib (this is the submodule)
   -BaseLib
   -AndroidLib

我想要实现的是':app'取决于':MappingLib:AndroidLib'(后者依赖于BaseLib)。但是,我似乎无法让这个工作。

尝试#1

MyCoolApp / settings.gradle:

include ':app', ':MappingLib'

MyCoolApp /应用/的build.gradle

dependencies {
  ...
  compile project(':MappingLib:AndroidLib')
  ...
}

这会产生错误Project with path ':MappingLib:AndroidLib' could not be found in project ':app'

尝试#2

所以我试着明确地调出MappingLib模块......

MyCoolApp / settings.gradle:

include ':app', ':MappingLib:AndroidLib', ':MappingLib:BaseLib'

这会产生错误Project with path ':BaseLib' could not be found in project ':MappingLib:AndroidLib'。这让我觉得问题是MappingLib项目中的依赖路径,即项目的根目录(MyCoolApp)比MappingLib子模块中的gradle文件高一级。

因此...

尝试#3

MyCoolApp / settings.gradle:

include ':app', ':MappingLib:AndroidLib', ':MappingLib:BaseLib'
project(':MappingLib:AndroidLib').projectDir = file(new File(rootDir, 'MappingLib'))

这会产生错误:Configuration with name 'default' not found.

从这篇文章(https://stackoverflow.com/a/22547615/4708255)看来,这意味着gradle无法在某处找到build.gradle文件,但我不确定从何处开始。

达到我想要的结果的正确方法是什么?

1 个答案:

答案 0 :(得分:2)

我最终找到了解决方案。解决方案是设置Gradle,以便父项目中的模块可以访问git子模块中的Gradle模块,就像它们与父项目中的模块位于同一目录级别一样。

变化如下:

MyCoolApp / settings.gradle:

include ':app', ':AndroidLib', ':BaseLib'
project('AndroidLib').projectDir = file(new File(rootDir, 'MappingLib\\AndroidLib'))
project('BaseLib').projectDir = file(new File(rootDir, 'MappingLib\\BaseLib'))

然后是MyCoolApp / app / build.gradle:

dependencies {
  ...
  compile project(':AndroidLib')
  ...
}