二、Gradle 构建
2023-12-29 04:14:04
一、Gradle 基础
二、Gradle 构建
三、Task 编写和使用
四、Plugin 编写和使用
Gradle 构建
2.1 构建过程
Gradle
在构建项目的过程中要经历三个不同的阶段
Gradle
的构建过程是通?的,任何由 Gradle
构建的项?都遵循这个过程。
- Phase 1. Initialization(初始化阶段):按顺序执?
init.gradle -> settings.gradle
脚本,?成Gradle
和Setting
对象,并根据settings
文件,决定需要构建的项目,为每个待构建的项目创建Project
对象。 - Phase 2. Configuration(编译阶段,也叫配置阶段):按顺序执?
root build.gradle -> subsubjects build.gradle
脚本,?成Task
执?流程图 - Phase 3. Execution(执行阶段):按照
Task
执?图顺序运?每?个Task
,完成?个个步骤,?成最终APK
?件。
2.2 settings.gradle(.kts)
settings
文件是每个Gradle
工程构建的入口点。
前面我们知道,在初始化阶段,会从项目的根目录下找到settings
文件。找到settings
文件后,Gradle
会实例化Settings
对象。Srttings
对象允许我们定义构建中包含的所有项目。
2.2.1 Setings Object
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() | 在特定的目录下添加一个构建,以实现复合构建 |
2.2.2 Settings Script structure
根据下面的例子,然后分析其结构。
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
,你可以选择性地定义项目可以使用哪些插件,同时,你也可以添加插件以及插件依赖解析策略。 - 运用插件:可以声明将来可能使用到的插件,在这里使用的插件可以加入到共享配置。这样,其它地方的子项目或者构建也可以使用,通过该方法,可以很方便地对插件版本进行统一管理。
- 定义根项目名称。
- 定义构建期间使用的仓库。
- 添加子项目。
2.3 Build Scripts
项目通常对应于需要构建的软件组件,如库或应用程序。它可能代表一个JAR
库、一个web
应用程序或一个由其他项目生成的JAR
组装而成的ZIP
。另一方面,它也可能表示要做的事情,例如将应用程序部署到测试或生产环境中。
每一个build
脚本都有各自独立的Project
对象,随着脚本的运行,项目也逐渐构建成型。
2.3.1 Project Object
像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. |
2.3.2 Build Script structure
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()
}
- Apply plugins to the build:插件用于扩展Gradle。它们还用于模块化和重用项目配置。
- Define the locations where dependencies can be found:一个项目通常有许多依赖项才能完成自己的工作。依赖项包括插件、库或组件,
Gradle
必须下载这些插件、库和组件才能成功构建。 - Add dependencies:一个项目通常有许多工作所需的依赖项。这些依赖项通常是在项目的源代码中导入的预编译类的库。
- Set properties:插件可以使用扩展将属性和方法添加到项目中。本例中,
applicatopn
插件添加了一个application
属性,用于详细说明Java
应用程序的主类。 - Register and configure tasks。
文章来源:https://blog.csdn.net/qq_31654025/article/details/135258980
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!