Quando usar gradle.properties vs. settings.gradle?

90

Uma compilação do Gradle tem três arquivos

  • build.gradle que define os scripts de configuração de construção
  • gradle.properties
  • settings.gradle

Questões

  • Quais são as diferenças entre settings.gradle& gradle.properties?
  • Quando uma configuração deve ser colocada em settings.gradlevs. gradle.properties?
ams
fonte

Respostas:

85

settings.gradle

O settings.gradlearquivo é um script Groovy, assim como o build.gradlearquivo. Apenas um settings.gradlescript será executado em cada build (em comparação com vários build.gradlescripts em builds de vários projetos). O settings.gradlescript será executado antes de qualquer build.gradlescript e mesmo antes de as Projectinstâncias serem criadas. Portanto, ele é avaliado em relação a um Settingsobjeto. Com este Settingsobjeto, você pode adicionar subprojetos à sua construção, modificar os parâmetros da linha de comando ( StartParameter) e acessar o Gradleobjeto para registrar manipuladores de ciclo de vida. Como consequência, use settings.gradlese suas configurações forem relacionadas à construção e não necessariamente relacionadas ao projeto ou exigirem lógica antes de possíveis subprojetos serem incluídos.

gradle.properties

O gradle.propertiesarquivo é um Propertiesarquivo Java simples que só ganha um papel especial ao ser incluído automaticamente no escopo do Projectobjeto (como as chamadas 'propriedades do projeto'). É um armazenamento de valor-chave simples que permite apenas valores de string (então você precisa dividir listas ou arrays sozinho). Você pode colocar gradle.propertiesarquivos nestes locais:

  • diretamente no diretório do projeto (para valores relacionados ao projeto)
  • no .gradlediretório inicial do usuário (para valores relacionados ao usuário ou ambiente)
Lukas Körfer
fonte
62

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.gradlearquivo 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.gradlearquivo do módulo principal , você pode usar allprojects {}ou subprojects {}para definir configurações para todos os outros módulos.

No build.gradlearquivo 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.propertiese 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/gradleousrc/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.gradlearquivos 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 buildSrcpode ser adaptada para qualquer projeto java / groovy / kotlin.

tkruse
fonte