Um projeto multimódulo tem um módulo principal e muitos submódulos. Possui este layout:
(root)
+- settings.gradle
+- build.gradle # optional (commonly present)
+- gradle.properties # optional
+-- buildSrc/ # optional
| +- build.gradle
| +-- src/...
+-- my-gradle-stuff/ # optional
| +- utils.gradle # optional
+-- sub-a/
| +- build.gradle
| +- src/
+-- sub-b/
+- build.gradle
+- src/
os submódulos também podem estar localizados mais profundamente nas subpastas, mas sem modificar o código em settings.gradle, seu nome incluirá o nome de tais pastas.
settings.gradle
A principal função de settings.gradle é definir todos os submódulos incluídos e marcar a raiz do diretório de uma árvore de módulos, de forma que você só possa ter um settings.gradle
arquivo em um projeto de vários módulos.
rootProject.name = 'project-x'
include 'sub-a', 'sub-b'
O arquivo de configurações também é escrito em groovy e a pesquisa de submódulo pode ser personalizada.
build.gradle
Existe um arquivo por módulo, ele contém a lógica de construção para este módulo.
No build.gradle
arquivo do módulo principal , você pode usar allprojects {}
ou subprojects {}
para definir configurações para todos os outros módulos.
No build.gradle
arquivo dos submódulos, você pode usar compile project(':sub-a')
para fazer um submódulo depender do outro.
gradle.properties
Isso é opcional, seu objetivo principal é fornecer opções de inicialização a serem usadas para executar o próprio Gradle, por exemplo
org.gradle.jvmargs=-Xmx=... -Dfile.encoding=UTF-8 ...
org.gradle.configureondemand=true
Esses valores podem ser substituídos por um arquivo USER_HOME/.gradle/gradle.properties
e substituídos por argumentos de linha de comando do gradle. Também é possível definir variáveis de ambiente para a construção neste arquivo usando systemProp.
como prefixo.
Qualquer propriedade neste arquivo pode ser usada em qualquer build.gradle, portanto, alguns projetos também colocam a versão de dependência ou informações de lançamento gradle.properties
, mas isso provavelmente é um abuso deste arquivo.
my-gradle-stuff / utils.gradle
(Qualquer nome de pasta ou arquivo é possível.) Você pode definir arquivos Gradle personalizados adicionais para reutilizar definições e incluí-los em outros arquivos Gradle via
apply from: "$rootDir/gradle/utils.gradle"
outros lugares para colocar isso podem ser src/gradle
ousrc/build/gradle
buildSrc / ...
Esta pasta é especial, é como um projeto separado do Gradle. Ele é criado antes de qualquer outra coisa e pode fornecer funções para uso em qualquer outro arquivo do Gradle. Por motivos técnicos, o suporte IDE para referências a esta pasta funciona muito melhor do que qualquer outra forma de extrair código comum de vários build.gradle
arquivos para um local separado.
Você pode definir uma lógica de construção personalizada complexa em java, groovy ou kotlin, em vez de escrever e implantar um plugin. Isso também é útil para testar a unidade de seu código de compilação personalizado, pois você pode ter testes de unidade. A estrutura da pasta de origem buildSrc
pode ser adaptada para qualquer projeto java / groovy / kotlin.