¿Cuál es la diferencia entre buildscript y todos los proyectos en build.gradle?

135

En una compilación de proyectos múltiples de gradle, ¿alguien puede decirme cuál es exactamente la diferencia entre la sección "todos los proyectos" y la "buildscript"? Ambos tienen una repositoriesy una dependenciestarea. Es allprojectspara mi proyecto? ¿Qué hay de buildscript?

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

y

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

Respuestas:

137

La buildscriptsección de configuración " " es para gradle (es decir, cambios en la forma en que gradle puede realizar la compilación). Por lo tanto, esta sección generalmente incluirá el complemento Android Gradle.

La allprojectssección " " es para los módulos construidos por Gradle.

A menudo, la sección del repositorio es la misma para ambos, ya que ambos obtendrán sus dependencias de jcenter generalmente (o tal vez maven central). Pero la sección "dependencias" será diferente.

Por lo general, la sección "dependencias" para "todos los proyectos" está vacía ya que las dependencias para cada módulo son únicas y estarán en el archivo "build.gradle" dentro de cada uno de los módulos. Sin embargo, si todos los módulos compartieran las mismas dependencias, podrían enumerarse aquí.

AndroidGuy
fuente
¿Tenemos que especificar la versión de gradle?
IgorGanapolsky
usuario: 6998684 La versión de gradle se aplica a todo el proyecto y se declara en un archivo que está un poco oculto. Busque en "./gradle/wrapper/gradle-wrapper.properties"
AndroidGuy
22

TL; DR: buildscriptayuda a encontrar complementos, se allprojectsaplica a todos los proyectos


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

Los complementos binarios que se han publicado como archivos jar externos se pueden agregar a un proyecto agregando el complemento a la ruta de clase del script de compilación y luego aplicando el complemento.

Entonces necesitas buildscriptque gradle encuentre los complementos, como

Gradle en su núcleo intencionalmente proporciona muy poco para la automatización del mundo real. Todas las funciones útiles, como la capacidad de compilar código Java, se agregan mediante complementos. Los complementos agregan nuevas tareas (p. Ej., JavaCompile), objetos de dominio (p. Ej., SourceSet), convenciones (p. Ej., La fuente de Java se encuentra en src / main / java), así como también extienden objetos centrales y objetos de otros complementos.

Sobreallprojects :

La API del proyecto proporciona una propiedad allprojectsque devuelve una lista con el proyecto actual y todos sus subproyectos debajo. Si llama allprojectscon un cierre, las declaraciones del cierre se delegan a los proyectos asociados allprojects.

serv-inc
fuente
Para mí, como principiante en el ecosistema de Android, esto no significa nada. ¿Dónde necesitamos poner nuestras dependencias? ¿Podemos eliminar ese "buildscript"?
Martin Berger
@MartinBerger: ponga sus dependencias en el módulo build.gradle, no en el build.gradledirectorio de arriba, que trata esta pregunta
serv-inc