Qual é a diferença entre buildscript e allprojects em build.gradle?

135

Em uma versão gradle de vários projetos, alguém pode me dizer qual é exatamente a diferença entre a seção "allprojects" e a seção "buildscript"? Ambos têm uma tarefa repositoriese dependencies. É allprojectspara o meu projeto? Que tal buildscript?

buildscript {  
     repositories {
         ...
     }
     dependencies {
         ...
     }
}

e

allprojects(subprojects) { 
     repositories {
         ...
     }
     dependencies {
         ...
     }
}
kidoher
fonte

Respostas:

137

A buildscriptseção " " de configuração é para o próprio gradle (isto é, altera a forma como o gradle é capaz de executar a compilação). Portanto, esta seção geralmente inclui o plug-in Android Gradle.

A allprojectsseção " " é para os módulos que estão sendo criados pela Gradle.

Muitas vezes, a seção de repositório é a mesma para ambos, já que ambos obterão suas dependências do jcenter normalmente (ou talvez do maven central). Mas a seção "dependências" será diferente.

Normalmente, a seção "dependências" para "todos os projetos" está vazia, pois as dependências de cada módulo são únicas e estarão no arquivo "build.gradle" em cada um dos módulos. No entanto, se todos os módulos compartilharem as mesmas dependências, eles poderão ser listados aqui.

AndroidGuy
fonte
Temos que especificar a versão gradle?
IgorGanapolsky 12/03/19
user: 6998684 A versão do gradle se aplica a todo o projeto e é declarada em um arquivo um pouco oculto. Procure em "./gradle/wrapper/gradle-wrapper.properties"
AndroidGuy
22

TL; DR: buildscriptajuda a encontrar plugins, allprojectsaplica-se a todos os projetos


https://docs.gradle.org/current/userguide/userguide_single.html#applyPluginBuildscript diz

Os plug-ins binários que foram publicados como arquivos jar externos podem ser adicionados a um projeto, adicionando-o ao caminho de classe do script de construção e aplicando-o.

Então, você precisa buildscriptdo gradle para encontrar os plugins, como

A Gradle, em sua essência, fornece muito pouco para automação do mundo real. Todos os recursos úteis, como a capacidade de compilar código Java, são adicionados por plugins. Os plug-ins adicionam novas tarefas (por exemplo, JavaCompile), objetos de domínio (por exemplo, SourceSet), convenções (por exemplo, a fonte Java está localizada em src / main / java), além de estender os principais objetos e objetos de outros plug-ins.

Em relação aallprojects :

A API do projeto fornece uma propriedade allprojectsque retorna uma lista com o projeto atual e todos os seus subprojetos abaixo dele. Se você ligar allprojectscom um fechamento, as instruções do fechamento serão delegadas aos projetos associados allprojects.

serv-inc
fonte
Para mim, como iniciante no ecossistema Android, isso não significa nada. Onde precisamos colocar nossas dependências? Podemos excluir esse "buildscript"?
Martin Berger
@ MartinBerger: coloque suas dependências no diretório do módulo build.gradle, não no build.gradlediretório acima, com o qual esta pergunta trata
serv-inc