buildscript和build.gradle中的allproject之间有什么区别?


135

在多项目Gradle构建中,有人可以告诉我“ allprojects”部分与“ buildscript”部分之间到底有什么区别吗?两者都有repositoriesdependencies任务。是allprojects为我的项目?那buildscript

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

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

Answers:


137

buildscript”配置部分用于gradle本身(即,更改gradle能够执行构建的方式)。因此,本节通常将包括Android Gradle插件。

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

通常情况下,两者的资源库部分都是相同的,因为两者通常都从jcenter(或可能是Maven Central)获取依赖。但是“依赖项”部分将有所不同。

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


我们必须指定gradle版本吗?
IgorGanapolsky

user:6998684 gradle的版本适用于整个项目,并在有点隐藏的文件中声明。在“ ./gradle/wrapper/gradle-wrapper.properties”中查找
AndroidGuy

22

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生态系统的初学者,这没有任何意义。我们需要把依赖项放在哪里?我们可以删除该“构建脚本”吗?
Martin Berger

@MartinBerger:将您的依赖项放在模块的目录中,而build.gradle不是build.gradle该问题所在的目录中
serv-inc
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.