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 {
         ...
     }
}

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.


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.


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.