¿Cuál es la forma correcta de depender de un proyecto gradle que sea un submodule Git?

Me encuentro con un problema al intentar include un submodule de Git en mi proyecto de Gradle y depender de un solo module de Gradle dentro del submodule de Git.

El submodule es una biblioteca que tiene la siguiente estructura:

MappingLib -BaseLib -AndroidLib 

Donde el file settings.gradle para MappingLib contiene:

 include ':BaseLib', ':AndroidLib' 

y el file build.gradle de AndroidLib contiene (entre otras cosas):

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

El submodule se construye bien cuando se desarrolla de forma independiente.

Luego tengo otro proyecto que incluye MappingLib como submodule. Este proyecto tiene la siguiente estructura:

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

Lo que me gustaría lograr es tener ': app' depende de ': MappingLib: AndroidLib' (que a su vez depende de BaseLib). Sin embargo, parece que no puedo hacer que esto funcione.

Intento # 1

MyCoolApp / settings.gradle:

 include ':app', ':MappingLib' 

MyCoolApp / app / build.gradle

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

Esto produce el error Project with path ':MappingLib:AndroidLib' could not be found in project ':app'

Intento # 2

Así que traté de llamar explícitamente a los modules MappingLib …

MyCoolApp / settings.gradle:

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

Esto produce el error Project with path ':BaseLib' could not be found in project ':MappingLib:AndroidLib' . Esto me hizo pensar que el problema son las routes de dependencia dentro del proyecto MappingLib, es decir, el directory raíz del proyecto (MyCoolApp) es un nivel más alto que lo que esperan los files gradle en el submodule MappingLib.

Asi que…

Intento # 3

MyCoolApp / settings.gradle:

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

Esto produce el error: Configuration with name 'default' not found.

De esta publicación ( http://sofes.miximages.com/a/22547615/4708255 ) parece que esto significa que gradle no puede encontrar un file build.gradle en algún lugar, pero no estoy seguro de a dónde ir desde aquí.

¿Cuál es la forma correcta de lograr el resultado que estoy buscando?

Terminé encontrando la solución. La solución fue configurar Gradle para que el module en el proyecto principal pudiera acceder a los modules Gradle en el submodule git como si estuvieran en el mismo nivel de directory que el module en el proyecto principal.

Los cambios fueron los siguientes:

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')) 

Y luego para MyCoolApp / app / build.gradle:

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