以下词汇表帮助您理解 Gradle 术语。
A
- 产物
-
构建生成的 文件或目录,例如 JAR 文件、ZIP 发行包或原生可执行文件。
产物通常设计为供用户和其他项目使用或消费,或部署到托管系统。在这些情况下,产物是单个文件。目录在项目间依赖的情况下很常见,以避免生成可发布产物的成本。
B
- Build Scan
-
Build Scan 是 Gradle 提供的一项服务,用于识别构建问题和构建性能。
- 构建脚本
-
build.gradle
脚本。构建脚本的存在,以及在settings 脚本中的条目(根构建脚本除外,它不需要条目),是定义 Gradle 模块的要素。
C
- 组件
-
模块的任何单个版本。
对于外部库,术语组件指的是一个已发布的库版本。
- 组件元数据规则
-
组件元数据规则是在从仓库获取组件元数据后修改组件元数据的规则,例如,添加缺失的信息或更正不正确的信息。与解析规则相反,组件元数据规则在解析开始之前应用。组件元数据规则被定义为构建逻辑的一部分,可以通过插件共享。有关更多信息,请参阅关于使用组件元数据规则修复元数据的部分。
- 配置阶段
-
Gradle 构建由两个主要阶段组成:配置阶段(不要与[sub:terminology_configuration] 实例混淆)和执行阶段。
配置阶段首先发生,并且是单线程的。
- 约定插件
-
构建在生态系统插件之上的[sub:terminology_plugin],它将常见的约定应用于使用该插件的构建脚本。
- 跨配置
-
请参阅跨项目配置。
- 跨项目配置
-
跨项目配置是指在多项目构建中管理和自定义多个子项目。
它允许您在共享的
build.gradle(.kts)
或settings.gradle.(kts)
文件中定义通用设置、依赖项和任务,通常位于根项目中build.gradlesubprojects { apply plugin: 'java' repositories { mavenCentral() } dependencies { testImplementation 'junit:junit:4.13.2' } }
跨项目配置通常会破坏项目隔离和并行项目执行,因此您应尽可能使用约定插件或适当的 API
build.gradlegradle.lifecycle.beforeProject { repositories { mavenCentral() } }
应始终避免以下跨项目配置示例
subprojectA/build.gradletasks.register("customTask") { // Avoid this! Directly accessing outputs from another subproject's task def outputFile = project(":subprojectB").tasks.named("someTask").get().outputs.files.singleFile inputs.file(outputFile) doLast { println("Processing file from subprojectB: ${outputFile}") } }
subprojectB/build.gradletasks.register("someTask") { def outputFile = layout.buildDirectory.file("output.txt") outputs.file(outputFile) doLast { outputFile.get().asFile.text = "Output from subprojectB" println("Generated output file in subprojectB: ${outputFile.get().asFile}") } }
这会将
subprojectA
紧密耦合到subprojectB
,破坏模块化并在并行构建或配置缓存期间创建潜在问题。
E
- 生态系统插件
-
负责构建语言的[sub:terminology_plugin],例如 Java (
java
和java-library
)、Groovy、Scala、Android、Kotlin 等。许多插件由 Gradle 维护,并且是 Gradle 发行版的一部分。
F
- 特性变体
-
特性变体是表示组件特性的变体,可以单独选择或不选择。特性变体由一个或多个能力标识。有关更多信息,请参阅关于建模特性变体和可选依赖的部分。
G
- Gradle 构建
-
Gradle 构建可以由一个或多个 Gradle 项目组成,并且通常使用根目录下的
settings.gradle(.kts)
文件进行配置。调用时,Gradle 构建会根据定义的构建逻辑执行一组任务,通常使用 Gradle Wrapper (
./gradlew
)。
I
- 增量构建
-
增量构建仅执行必要的任务。如果我们运行任何源代码,Gradle 首先检查该源代码是否经历过任何先前的执行。如果代码有一些更改,则将执行该代码,但如果没有更改,则将跳过该代码的执行。
- 初始化脚本
-
初始化脚本或 init 脚本由
Gradle
类型的实例支持。
M
- MavenCentral
-
MavenCentral 是托管 Maven 发布的主要仓库。它由一家名为 Sonatype 的公司运营,并且是许多生态系统的默认仓库。
存在许多其他仓库,例如(现在已 defunct)jcenter 或 Google Maven 仓库。
- 模块
-
随着时间推移演变的软件片段,例如 Google Guava。每个模块都有一个名称。每个模块版本都由模块版本最佳表示。为了方便消费,模块可以托管在仓库中。
- 模块元数据
-
模块的发布提供元数据。元数据是更详细地描述模块的数据,例如,关于产物位置或所需传递依赖的信息。Gradle 提供其自己的元数据格式,称为 Gradle 模块元数据 (
.module
文件),但也支持 Maven (.pom
) 和 Ivy (ivy.xml
) 元数据。请参阅关于理解 Gradle 模块元数据的部分,以获取有关支持的元数据格式的更多信息。
P
- 平台
-
平台是一组旨在一起使用的模块。平台有不同的类别,对应于不同的用例
- 插件
-
Gradle 构建在插件系统之上。Gradle 本身主要由基础设施组成,例如,对于所有项目类型都复杂的依赖解析引擎。其余功能来自插件,包括与 Gradle 本身一起分发的“核心”插件、第三方插件以及给定构建中的脚本插件。
基于应用它们的上下文,插件有三种类型
-
项目插件,实现
Plugin<Project>
,在构建脚本中应用。 -
Settings 插件,实现
Plugin<Settings>
,在settings 脚本中应用。 -
Init (Gradle) 插件,实现
Plugin<Gradle>
,在init 脚本中应用。
插件可以实现为所谓的二进制插件(即,通过显式实现上述特定泛型接口之一),或者作为预编译脚本插件。这种区别仅仅是一个实现细节。
- 预编译脚本插件
-
等效于插件,但编写方式使其看起来像构建脚本,预编译脚本插件可以使用 Groovy 或 Kotlin 编写,分别应用
groovy-gradle-plugin
或kotlin-dsl
插件。
- 项目
-
通常称为“模块”,每个 Gradle 项目都由
Project
实例支持,因此得名。大多数 Gradle 构建由许多项目(通常称为“子项目”)组成。
- 发布物
-
应该作为单个实体发布到仓库供使用者使用的文件和元数据的描述。
发布物具有名称,并且由一个或多个产物加上关于这些产物的信息(元数据)组成。
T
- 任务
-
每个项目由一个或多个任务组成。每个任务都应该是原子的(但通常不是),具有输入和输出。Gradle 执行任务以执行其工作。
任务示例包括:编译源代码、创建产物(例如 jar 或 apk)、生成 Javadoc、运行静态分析(例如 lint)、删除临时文件或发布到仓库等。
当要求 Gradle 任务运行时,我们可以看到任务的结果。这将是
EXECUTED
、SKIPPED
、FAILED
、FROM-CACHE
、UP-TO-DATE
、NO-SOURCE
或空白之一(表示已执行)。