build.gradle中的buildscript和allprojects有什么区别?

kid*_*her 116 gradle android-gradle-plugin

在多项目gradle构建中,有人可以告诉我"allprojects"部分和"buildscript"部分之间究竟有什么区别?两者有一个repositoriesdependencies任务.是allprojects为了我的项目?怎么样buildscript

buildscript {  
     repositories {
         ...
     }
     dependencies {
         ...
     }
}
Run Code Online (Sandbox Code Playgroud)

allprojects(subprojects) { 
     repositories {
         ...
     }
     dependencies {
         ...
     }
}
Run Code Online (Sandbox Code Playgroud)

And*_*Guy 122

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

" allprojects"部分用于Gradle构建的模块.

通常情况下,存储库部分对于两者都是相同的,因为两者通常都会从jcenter(或者可能是maven central)获得它们的依赖关系.但"依赖"部分将有所不同.

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


ser*_*inc 19

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


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

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

所以你需要buildscriptgradle来找到插件,

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

关于allprojects:

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

  • 对于我这个 Android 生态系统的初学者来说,这毫无意义。我们需要将依赖项放在哪里?我们可以删除那个“buildscript”吗? (3认同)