Gradle构建工具入门

/ 0评 / 1

Gradle 是一个基于 Apache AntApache Maven 概念的项目自动化构建工具,支持依赖管理和多项目,类似 Maven,但比之简单轻便。它使用一种基于 Groovy 的特定领域语言来声明项目设置,而不是传统的 XML。

目前在 Android 开发中已经广泛使用,并且越来越多的 Java Web 项目也开始使用 Gradle 作为项目构建工具。

安装 Gradle

官网下载地址: https://gradle.org/install/ ,安装前先配置本地 JDK 环境。

java -version

方式一:使用 SDK 包管理器进行安装

sdk install gradle 5.3.1

方式二:macOS 可使用 Homebrew 工具进行安装。

brew install gradle

方式三:如果感觉上面的方式太简单,可以下载 Gradle 安装,并手动配置环境变量。手动安装请查看文档:https://gradle.org/install/#manually

安装完成后,检查是否配置成功。

gradle -v

创建 Gradle 项目

使用 IDEA 创建 Gradle 项目,这里我们创建 Java 项目。

勾选 Use auto-import 自动导包,并使用我们刚安装好的 Gradle ,我是使用 Homebrew 安装的,所以安装路径在 /usr/local/Cellar 目录下。

Groovy 入门

Gradle 目前支持 JavaGroovyScala ,最终编译后都是运行在 JVM 虚拟机上的。

首先打开 IDEA 的 Groovy Console 工具。

编写一个简单的 JavaBean 。

public class Test {
    private int age;
    private String name;

    public Test(int age, String name) {
        this.age = age;
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

测试编写的 JavaBean。

Test test = new Test(12, "jack");
println(test.getName());

运行完全没问题,说明 Groovy 兼容 Java 代码的。

改造我们刚写的 JavaBean,去掉修饰符、句尾分号、getter/setter 方法,运行和刚才一样的结果,说明 Groovy 可以省略句尾分号,自动生成 getter/setter 方法,修饰符默认是 public

class Test {
    int age
    String name

    Test(int age, String name) {
        this.age = age
        this.name = name
    }
}

Groovy 高效特性

类型推导:类似 JavaScript 中使用 var 关键字定义变量,不用指定数据类型。

def version = 1

断言:使用 assert 断定条件,不满足则报错。

assert version == 2

小括号:调用方法可以省略小括号。

println(version)
println version

字符串:Groovy 中字符串支持三种编写方式。

def s1 = '一个单引号普通字符串'
def s2 = "双引号可以插入变量 version = ${version}"
def s3 = '''三个单引号
可以支持
换行'''

println s1
println s2
println s3

集合:Groovy List 集合默认是 ArrayList , Map 默认是 LinkedHashMap 。给集合添加元素和取出元素,也有简写方式。

def buildTools = ['ant', 'maven']
buildTools << 'gradle'
buildTools.add 'test'

assert buildTools.getClass() == ArrayList
assert buildTools.size() == 4
def buildYears = ['ant': 2000]
buildYears['maven'] = 2004
buildYears.gradle = 2009

assert buildYears.getClass() == LinkedHashMap
println buildYears.maven
println buildYears['gradle']

闭包:有点类似 Java 中的匿名内部类的语法糖 Lambda 表达式、 Swift 中的闭包。

def c1 = {
    v ->
        println v
}

def c2 = {
    println 'hello'
}

def method1(Closure closure) {
    closure('param')
}

def method2(Closure closure) {
    closure()
}

method1 c1
method2 c2

不过闭包在 Gradle 构建工具使用中,我们一般只使用一种方式。

def test(Closure closure) {
    closure()
}

// 调用闭包
test {
    println 'Hello Closure'
}

解析 build.gradle

我们在使用 Gradle 创建项目后,项目目录下会有一个 build.gradle 构建脚本配置文件,我们编写配置就是在这个文件中。

我目前的 Gradle 版本是 5.3.1 ,不同版本默认生成的 build.gradle 文件中的内容也略有不同,不过只要了解了 Groovy 基础语法,都是能看懂的。

在解析这个构建配置文件之前,要先了解一个概念:构建脚本中默认有一个 Project 实例

基于这个概念,我们再去看这个构建脚本中的内容就比较容易理解了。

plugins {
    id 'java'
}

group 'com.zaiae.gradle'
version '1.0-SNAPSHOT'

sourceCompatibility = 1.8

repositories {
    mavenCentral()
}

dependencies {
    testCompile group: 'junit', name: 'junit', version: '4.12'
}

语法

调用 Project 实例中的 plugins 方法,传入一个闭包参数。给闭包中的 id 属性赋值 java 字符串。

作用:

使用 Java 插件。

plugins {
    id 'java'
}

语法

给 Project 实例中的 groupversionsourceCompatibility 3个属性赋值,可以理解成调用对应属性的 setter 方法。

作用

group 配置了项目的组织标识为 com.zaiae.gradle ,相当于 maven 中的 groupId 。

version 配置了项目的版本号,相当于 maven 中的 version 。

sourceCompatibility 配置了编译项目使用的 JDK 版本。

group 'com.zaiae.gradle'
version '1.0-SNAPSHOT'

sourceCompatibility = 1.8

语法

调用 Project 实例中的 repositories 方法,传入一个闭包参数。

作用

repositories 配置包托管仓库,这里只配置了 maven 中央仓库,还可以配置私服等。

repositories {
    mavenCentral()
}

语法

调用 Project 实例中的 dependencies 方法,传入一个闭包参数。给闭包中 testCompile 属性赋值一个 map 集合。

作用

配置项目依赖,相当于 maven 中的 dependencies 。

group 相当于 maven 中的 groupId 。

name 相当于 maven 中的 artifactId 。

version 相当于 maven 中的 version 。

dependencies {
    testCompile group: 'junit', name: 'junit', version: '4.12'
}

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注