ChatGPT解决这个技术问题 Extra ChatGPT

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

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

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

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

s
serv-inc

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

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

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

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


我们必须指定 gradle 版本吗?
user:6998684 gradle 的版本适用于整个项目,并在一个有点隐藏的文件中声明。查看“./gradle/wrapper/gradle-wrapper.properties”
您好,问题:我可以在两个 for 的范围/闭包之外使用 one 存储库或依赖项属性,还是它们都必须在 {1 } 还是 allprojectsbuildscript 属性内的 classpath 属性是否会影响 buildscript 属性外的 dependencyManagement 属性?谢谢
C
Community

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,这个问题涉及