build.gradle中的buildscript和allprojects之间的区别是什么?

时间:2015-05-11 02:51:31

标签: gradle android-gradle

在多项目gradle构建中,有人可以告诉我" allprojects"部分和" buildscript"一?两者都有repositoriesdependencies任务。我的项目是allprojects吗?那么buildscript呢?

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

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

2 个答案:

答案 0 :(得分:113)

buildscript”配置部分用于gradle本身(即更改gradle如何执行构建)。所以本节通常会包含Android Gradle插件。

allprojects”部分适用于Gradle正在构建的模块。

两者的存储库部分通常都是相同的,因为两者通常都会从jcenter获取它们的依赖关系(或者可能是maven central)。但“依赖”部分将有所不同。

通常“allprojects”的“dependencies”部分为空,因为每个模块的依赖关系是唯一的,并且将位于每个模块中的“build.gradle”文件中。但是,如果所有模块共享相同的依赖项,则可以在此处列出它们。

答案 1 :(得分:12)

TL; DR:buildscript帮助查找插件,allprojects适用于所有项目

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

  

通过将插件添加到构建脚本类路径然后应用插件,可以将已发布为外部jar文件的二进制插件添加到项目中。

因此,您需要{gra buildscript才能找到插件as

  

Gradle的核心故意为现实世界的自动化提供很少的东西。所有有用的功能,如编译Java代码的能力,都是由插件添加的。插件添加新任务(例如JavaCompile),域对象(例如SourceSet),约定(例如Java源位于src / main / java)以及从其他插件扩展核心对象和对象。

Concerning allprojects

  

Project API提供了一个属性allprojects,它返回一个列表,其中包含当前项目及其下的所有子项目。如果使用闭包调用allprojects,则闭包的语句将委托给与allprojects关联的项目。