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”部分之间到底有什么区别吗?两者都有repositories
和dependencies
任务。 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,快的飞起