设置脚本
设置脚本可以是settings.gradle
Groovy 中的文件,也可以是settings.gradle.kts
Kotlin 中的文件。
在 Gradle 组装项目进行构建之前,它会创建一个Settings
实例并针对它执行设置文件。
当设置脚本执行时,它会配置此Settings
.因此,设置文件定义了该Settings
对象。
Settings 实例和文件
之间存在一一对应的关系settings.gradle(.kts) 。
|
物体Settings
该对象是Gradle APISettings
的一部分。
设置脚本中的许多顶级属性和块都是设置 API 的一部分。
例如,我们可以使用以下属性在设置脚本中设置根项目名称Settings.rootProject
:
settings.rootProject.name = "root"
通常缩写为:
rootProject.name = "root"
标准Settings
特性
该Settings
对象在您的设置脚本中公开一组标准属性。
下表列出了一些常用的属性:
姓名 | 描述 |
---|---|
|
构建缓存配置。 |
|
已应用于设置的插件的容器。 |
|
构建的根目录。根目录是根项目的项目目录。 |
|
构建的根项目。 |
|
返回此设置对象。 |
下表列出了几种常用的方法:
姓名 | 描述 |
---|---|
|
将给定的项目添加到构建中。 |
|
包括复合构建的指定路径处的构建。 |
设置脚本结构
设置脚本是对 Gradle API 的一系列方法调用,通常使用{ … }
,这是 Groovy 和 Kotlin 语言中的特殊快捷方式。块在 Kotlin 中{ }
称为lambda ,在 Groovy 中称为闭包。
简而言之,该plugins{ }
块是一个方法调用,其中传递 Kotlin lambda对象或 Groovy闭包对象作为参数。它的缩写形式是:
plugins(function() {
id("plugin")
})
块映射到 Gradle API 方法。
函数内的代码针对一个对象执行,该对象在 Kotlin lambda 中this
称为接收器,在 Groovy 闭包中称为委托。 Gradle 确定正确的this
对象并调用正确的相应方法。this
方法调用对象的 的类型id("plugin")
为PluginDependenciesSpec
。
设置文件由构建在 DSL 之上的 Gradle API 调用组成。 Gradle 从上到下逐行执行脚本。
让我们看一个例子并将其分解:
pluginManagement { (1)
repositories {
gradlePluginPortal()
google()
}
}
plugins { (2)
id("org.gradle.toolchains.fake") version "0.6.0"
}
rootProject.name = "root-project" (3)
dependencyResolutionManagement { (4)
repositories {
mavenCentral()
}
}
include("sub-project-a") (5)
include("sub-project-b")
include("sub-project-c")
1 | Define the location of plugins |
2 | Apply plugins. |
3 | Define the root project name. |
4 | Define build-wide repositories. |
5 | Add subprojects to the build. |
pluginManagement { (1)
repositories {
gradlePluginPortal()
google()
}
}
plugins { (2)
id 'org.gradle.toolchains.fake' version '0.6.0'
}
rootProject.name = 'root-project' (3)
dependencyResolutionManagement { (4)
repositories {
mavenCentral()
}
}
include('sub-project-a') (5)
include('sub-project-b')
include('sub-project-c')
1 | Define the location of plugins. |
2 | Apply plugins. |
3 | Define the root project name. |
4 | Define build-wide repositories. |
5 | Add subprojects to the build. |
1.定义插件的位置
设置文件可以选择定义您的项目使用的插件pluginManagement
,包括二进制存储库,例如 Gradle 插件门户或其他使用以下 Gradle 构建includeBuild
:
pluginManagement {
repositories {
gradlePluginPortal()
google()
}
}
您还可以在此块中包含插件和插件依赖项解析策略。
2. 应用插件
设置文件可以选择声明稍后可能应用的插件,这可以在多个构建/子项目之间添加共享配置:
应用于设置的插件仅影响Settings
对象。
plugins {
id("org.gradle.toolchains.fake") version "0.6.0"
}
这通常用于确保所有子项目使用相同的插件版本。
4. 定义构建范围的存储库
设置文件可以选择使用 Maven Central 等二进制存储库和/或其他 Gradle 构建来定义项目所依赖的组件的位置(以及如何解析它们):repositories
includeBuild
dependencyResolutionManagement {
repositories {
mavenCentral()
}
}
您还可以在此部分中包含版本目录。
5. 将子项目添加到构建中
设置文件通过使用以下语句添加所有子项目来定义项目的结构include
:
include("app")
include("business-logic")
include("data-model")
设置文件脚本
该对象还有更多属性和方法Settings
可用于配置构建。
重要的是要记住,虽然许多 Gradle 脚本通常是用简短的 Groovy 或 Kotlin 语法编写的,但设置脚本中的每个项目本质上都是调用Settings
Gradle API 中对象的方法:
include("app")
实际上是:
settings.include("app")
此外,您还可以使用 Groovy 和 Kotlin 语言的全部功能。
例如,include
您可以迭代项目根文件夹中的目录列表并自动包含它们,而不是多次添加子项目:
rootDir.listFiles().filter { it.isDirectory && (new File(it, "build.gradle.kts").exists()) }.forEach {
include(it.name)
}
这种类型的逻辑应该在插件中开发。 |
下一步: 学习如何编写构建脚本>>