一、Gradle 基础
二、Gradle 构建
三、Task 编写和使用
四、Plugin 编写和使用
Gradle
在构建项目的过程中要经历三个不同的阶段
Gradle
的构建过程是通?的,任何由 Gradle
构建的项?都遵循这个过程。
init.gradle -> settings.gradle
脚本,?成Gradle
和Setting
对象,并根据settings
文件,决定需要构建的项目,为每个待构建的项目创建Project
对象。root build.gradle -> subsubjects build.gradle
脚本,?成 Task
执?流程图Task
执?图顺序运?每?个 Task
,完成?个个步骤,?成最终 APK
?件。settings
文件是每个Gradle
工程构建的入口点。
前面我们知道,在初始化阶段,会从项目的根目录下找到settings
文件。找到settings
文件后,Gradle
会实例化Settings
对象。Srttings
对象允许我们定义构建中包含的所有项目。
Settings
对象属于Gradle API
,对于Groovy DSL
地址为:Settings - Gradle DSL Version 8.5,对于Kotlin DSL
地址为:Settings (gradle.org)。
settings
脚本中很多顶层属性和块其实是Settings API
的一部分,比如:
settings.rootProject.name = "root"
// 等价于
rootProject.name = "root"
Settings
对象的常用属性如下所示:
Name | Description |
---|---|
buildCache | 构建缓存配置 |
plugins | settings中应用的插件容器 |
rootDir | 构建的根目录。根目录是根项目的项目目录。 |
rootProject | 构建的根项目 |
settings | 返回settings 对象 |
下面的表格包含常用的方法:
Name | Description |
---|---|
include() | 添加参数给定的项目待构建 |
includeBuild() | 在特定的目录下添加一个构建,以实现复合构建 |
根据下面的例子,然后分析其结构。
settings.gradle
pluginManagement { Ⅰ
repositories {
gradlePluginPortal()
google()
}
}
plugins { Ⅱ
id 'org.gradle.toolchains.fake' version '0.6.0'
}
rootProject.name = 'root-project' Ⅲ
dependencyResolutionManagement { Ⅳ
repositories {
mavenCentral()
}
}
include('sub-project-a') Ⅴ
include('sub-project-b')
include('sub-project-c')
pluginManagement
,你可以选择性地定义项目可以使用哪些插件,同时,你也可以添加插件以及插件依赖解析策略。
项目通常对应于需要构建的软件组件,如库或应用程序。它可能代表一个JAR
库、一个web
应用程序或一个由其他项目生成的JAR
组装而成的ZIP
。另一方面,它也可能表示要做的事情,例如将应用程序部署到测试或生产环境中。
每一个build
脚本都有各自独立的Project
对象,随着脚本的运行,项目也逐渐构建成型。
像Settings Object
一样,Project
也有自己的API
:Project - Gradle DSL Version 8.5 和 Settings (gradle.org)。
下面表格列出常用的属性:
Name | Type | Description |
---|---|---|
name | String | The name of the project directory. |
path | String | The fully qualified name of the project. |
description | String | A description for the project. |
dependencies | DependencyHandler | Returns the dependency handler of the project. |
repositories | RepositoryHandler | Returns the repository handler of the project. |
layout | ProjectLayout | Provides access to several important locations for a project. |
group | Object | The group of this project. |
version | Object | The version of this project. |
下面表格列出常用的方法:
Name | Description |
---|---|
uri() | Resolves a file path to a URI, relative to the project directory of this project. |
task() | Creates a Task with the given name and adds it to this project. |
plugins {
id 'org.jetbrains.kotlin.jvm' version '1.9.0' Ⅰ
id 'application'
}
repositories {
mavenCentral() Ⅱ
}
dependencies { Ⅲ
testImplementation 'org.jetbrains.kotlin:kotlin-test-junit5'
testImplementation 'org.junit.jupiter:junit-jupiter-engine:5.9.3'
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
implementation 'com.google.guava:guava:32.1.1-jre'
}
application { Ⅳ
mainClass = 'com.example.Main'
}
tasks.named('test') { Ⅴ
useJUnitPlatform()
}
Gradle
必须下载这些插件、库和组件才能成功构建。applicatopn
插件添加了一个application
属性,用于详细说明Java
应用程序的主类。