概述
Gradle 是一个开源的构建自动化工具,专注于灵活性和性能。Gradle 构建脚本采用 Groovy 或 Kotlin DSL 编写,环境需要依赖 JDK 1.7 及以上的版本。
项目结构
Groovy
使用 gradle init
即可创建一个基于 Groovy 的 Gradle 构建项目,其项目目录如下:
├── gradle
│ └── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── build.gradle
├── gradlew
├── gradlew.bat
└── settings.gradle
Kotlin DSL
使用 gradle init --dsl kotlin
即可创建基于 Kotlin DSL 的 Gradle 构建项目,其项目目录如下:
├── build.gradle.kts
├── gradle
│ └── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
└── settings.gradle.kts
结构说明
build.gradle / build.gradle.kts
:用于在当前项目中配置构建所需的任务gradle-wrapper.jar
:Gradle Wrapper 可执行 JARgradle-wrapper.properties
:Gradle Wrapper 配置文件gradlew / gradlew.bat
:作用于 Unix-based / Windows 系统的 Gradle Wrapper 脚本settings.gradle / settings.gradle.kts
:Gradle 构建配置文件
Gradle Wrapper
Gralde Wrapper 脚本中声明了一个 Gradle 的版本,通过脚本可以预先按需下载所需要的 Gradle 版本。Gradle Wrapper 作为 Gradle 项目的一部分,简化了 Gradle 本身的安装和部署,并且通过 Gradle Wrapper 可以为不同的项目设置不同的 Grade 版本,从而避免由于不同项目间因为 Gradle 版本不同而导致的冲突。
构建脚本
任务(Task)
Gradle 提供了用于通过基于 Groovy 或 Kotlin DSL 创建和配置任务的 API。通常来说,一个项目(Project)包含多个任务(Task),每个任务执行一些基本的原子操作。
默认情况下,Gradle 将 build.gradle / build.gradle.kts
作为默认构建文件,使用 task
关键字即可定义任务,如下所示为基础的复制文件任务:
-
Groovy
task copy(type: Copy) { from "src" into "dest" }
-
Kotlin DSL
tasks.create<Copy>("copy") { from("src") into("dest") }
通过 ./gradlew copy
即可执行名为 copy
的任务,执行结果如下:
> Configure project :
> Task :copy
BUILD SUCCESSFUL in 0s
1 actionable task: 1 executed
插件(Plugin)
Gradle 提供了许多可用于构建的插件,最为通用的一部分包含在 base
插件中,如下所示为生成 zip 压缩包的 Zip
插件。
-
Groovy
plugins { id "base" } task zip(type: Zip) { from "src" setArchiveName "basic-demo-1.0.zip" }
-
Kotlin DSL
plugins { id("base") } tasks.create<Zip>("zip") { from("src") setArchiveName("basic-demo-1.0.zip") }
构建环境
配置方式
Gradle 提供了多种机制对进行全局配置及对特定项目的配置:
- 命令行参数(Command-line Flags):在执行 Gradle 命令行阶段输入,优先级最高。如使用
--build-cache
参数使得 Gradle 能够复用之前任务调度的输出。 - 系统环境配置(System Properties):在系统级别的
gradle.properties
文件中进行配置,优先级低于命令行参数。如添加systemProp.http.proxyHost=somehost.org
配置为 Gradle 设置代理。 - 项目环境配置(Gradle Properties):在项目根目录的
gradle.properties
中进行配置,优先级低于系统环境配置。如添加org.gradle.caching=true
使得 Gradle 重用的先前构建的输出。 - 环境变量(Environment variables):在执行 Gradle 命令的环境中进行配置,优先级最低。如在命令行中通过
GRADLE_OPTS
配置 Gradle 缓存文件夹的路径。
配置参数
org.gradle.caching=(true, false)
:默认为false
,参数值为true
时,Gradle 将尽可能的复用任何先前构建的任务输出,以此加快构建的速度。org.gradle.caching.debug=(true, false)
:默认为false
,参数值为true
时,将在控制台上为每一个任务记录输入属性哈希值以及构建缓存键。org.gradle.configureondemand=(true, false)
:默认为false
,参数值为true
时,Gradle 可以实现按需配置的构建,目前仍处于实验孵化阶段,默认为false
。org.gradle.console=(auto, plain, rich, verbose)
:自定义控制台输出着色或详细程度。 默认值取决于 Gradle 的调用方式。org.gradle.daemon=(true, false)
:设置为true
时,Gradle Daemon 用于运行构建。默认为true
。org.gradle.daemon.idletimeout=(# of idle millis)
:Gradle 守护程序将在指定的空闲毫秒数后自行终止。默认值为 10800000(3 小时)。org.gradle.debug=(true, false)
:设置为true
时,Gradle 将在启用远程调试的情况下运行构建,侦听端口 5005。请注意,这相当于将-agentlib:jdwp = transport = dt_socket,server = y,suspend = y,address = 5005 添加到 JVM 命令行并将挂起虚拟机,直到连接调试器。默认值为 false。org.gradle.java.home=(Path to JDK home)
:指定 Gradle 构建过程的 Java 主目录。可以将值设置为 jdk 或 jre 位置,但是,根据构建的功能,使用 JDK 会更安全。如果未指定设置,则使用合理的默认值。org.gradle.jvmargs=(JVM arguments)
:(JVM 参数) 指定用于 Gradle 守护程序的 JVM 参数。该设置对于为构建性能配置 JVM 内存设置特别有用。org.gradle.logging.level=(quiet, warn, lifecycle, info, debug)
:当设置为安静,警告,生命周期,信息或调试时,Gradle 将使用此日志级别。值不区分大小写。生命周期级别是默认值。请参阅选择日志级别。org.gradle.parallel=(true, false)
:配置完成后,Gradle 将分叉到 org.gradle.workers.max JVM 以并行执行项目。要了解有关并行任务执行的更多信息,请参阅 Gradle 性能指南。org.gradle.warning.mode=(all, none, summary)
:当设置为 all,summary 或 none 时,Gradle 将使用不同的警告类型显示。有关详细信息,请参阅命令行日志记录选org.gradle.workers.max=(Max # of worker processes)
:配置后,Gradle 将使用给定数量的工作者的最大值。默认值是 CPU 处理器数。另请参见性能命令行选项。