我遇到了一个问题,试图在我的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)。但是,我似乎无法让这个工作。
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'
所以我试着明确地调出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文件高一级。
因此...
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文件,但我不确定从何处开始。
达到我想要的结果的正确方法是什么?
答案 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')
...
}