概述

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 可执行 JAR
  • gradle-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 处理器数。另请参见性能命令行选项。