二、Gradle 构建

发布时间:2023年12月29日

一、Gradle 基础
二、Gradle 构建
三、Task 编写和使用
四、Plugin 编写和使用


Gradle 构建

2.1 构建过程

Gradle在构建项目的过程中要经历三个不同的阶段

build phases

Gradle 的构建过程是通?的,任何由 Gradle 构建的项?都遵循这个过程。

  • Phase 1. Initialization(初始化阶段):按顺序执? init.gradle -> settings.gradle 脚本,?成GradleSetting对象,并根据settings文件,决定需要构建的项目,为每个待构建的项目创建Project 对象。
  • Phase 2. Configuration(编译阶段,也叫配置阶段):按顺序执? root build.gradle -> subsubjects build.gradle脚本,?成 Task 执?流程图
  • Phase 3. Execution(执行阶段):按照 Task 执?图顺序运?每?个 Task,完成?个个步骤,?成最终 APK ?件。

build lifecycle

2.2 settings.gradle(.kts)

settings文件是每个Gradle工程构建的入口点。

settings and Settings

前面我们知道,在初始化阶段,会从项目的根目录下找到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对象的常用属性如下所示:

NameDescription
buildCache构建缓存配置
pluginssettings中应用的插件容器
rootDir构建的根目录。根目录是根项目的项目目录。
rootProject构建的根项目
settings返回settings对象

下面的表格包含常用的方法:

NameDescription
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')
  1. 定义插件的位置:通过pluginManagement,你可以选择性地定义项目可以使用哪些插件,同时,你也可以添加插件以及插件依赖解析策略。
  2. 运用插件:可以声明将来可能使用到的插件,在这里使用的插件可以加入到共享配置。这样,其它地方的子项目或者构建也可以使用,通过该方法,可以很方便地对插件版本进行统一管理。
  3. 定义根项目名称。
  4. 定义构建期间使用的仓库。
  5. 添加子项目。

2.3 Build Scripts

build script
项目通常对应于需要构建的软件组件,如库或应用程序。它可能代表一个JAR库、一个web应用程序或一个由其他项目生成的JAR组装而成的ZIP。另一方面,它也可能表示要做的事情,例如将应用程序部署到测试或生产环境中。

每一个build脚本都有各自独立的Project对象,随着脚本的运行,项目也逐渐构建成型。

2.3.1 Project Object

Settings Object一样,Project也有自己的APIProject - Gradle DSL Version 8.5Settings (gradle.org)

下面表格列出常用的属性:

NameTypeDescription
nameStringThe name of the project directory.
pathStringThe fully qualified name of the project.
descriptionStringA description for the project.
dependenciesDependencyHandlerReturns the dependency handler of the project.
repositoriesRepositoryHandlerReturns the repository handler of the project.
layoutProjectLayoutProvides access to several important locations for a project.
groupObjectThe group of this project.
versionObjectThe version of this project.

下面表格列出常用的方法:

NameDescription
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()
}
  1. Apply plugins to the build:插件用于扩展Gradle。它们还用于模块化和重用项目配置。
  2. Define the locations where dependencies can be found:一个项目通常有许多依赖项才能完成自己的工作。依赖项包括插件、库或组件,Gradle必须下载这些插件、库和组件才能成功构建。
  3. Add dependencies:一个项目通常有许多工作所需的依赖项。这些依赖项通常是在项目的源代码中导入的预编译类的库。
  4. Set properties:插件可以使用扩展将属性和方法添加到项目中。本例中,applicatopn插件添加了一个application属性,用于详细说明Java应用程序的主类。
  5. Register and configure tasks。
文章来源:https://blog.csdn.net/qq_31654025/article/details/135258980
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。