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

Posted

技术标签:

【中文标题】build.gradle 中的 buildscript 和 allprojects 有啥区别?【英文标题】:What's the difference between buildscript and allprojects in build.gradle?build.gradle 中的 buildscript 和 allprojects 有什么区别? 【发布时间】:2015-07-21 10:39:20 【问题描述】:

在多项目 gradle 构建中,有人能告诉我“allprojects”部分和“buildscript”部分之间到底有什么区别吗?两者都有repositoriesdependencies 任务。 allprojects 是我的项目吗? buildscript呢?

buildscript   
     repositories 
         ...
     
     dependencies 
         ...
     

allprojects(subprojects)  
     repositories 
         ...
     
     dependencies 
         ...
     

【问题讨论】:

【参考方案1】:

buildscript”配置部分用于 gradle 本身(即更改 gradle 执行构建的方式)。所以这部分通常会包含 android Gradle 插件。

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

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

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

【讨论】:

我们必须指定gradle版本吗? user:6998684 gradle 的版本适用于整个项目,并在一个有点隐藏的文件中声明。查看“./gradle/wrapper/gradle-wrapper.properties”【参考方案2】:

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


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

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

所以你需要 buildscript 让 gradle 找到插件,as

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

Concerning allprojects:

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

【讨论】:

对我来说,作为 android 生态系统的初学者,这没有任何意义。我们需要将依赖项放在哪里?我们可以删除那个“buildscript”吗? @MartinBerger:将您的依赖项放在模块的build.gradle 中,而不是上面一个目录中的build.gradle,这个问题涉及

以上是关于build.gradle 中的 buildscript 和 allprojects 有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

Android 安卓超级强劲的轻量级数据库ObjectBox,快的飞起

Android 安卓超级强劲的轻量级数据库ObjectBox,快的飞起

gradle build 未检测到 build.gradle 中的 android ndkVersion

Gradle中的build.gradle文件

gradle中的build script详解

build.gradle 中的父 pom 用法