Gradle Basic

Posted by CoXier on March 28, 2017

一、Gradle介绍

Gradle 是一种构建工具,基于 Grovy 语言,顺带一提,Grovy 文件经过编译之后也是.class 文件。官网对 gralde 的描述是:对于 java 工程的构建是一个飞跃。

相比于之前的 maven 构建工具,Gradle 的优势在于:

  • 构建配置文件较容易,maven 需要使用 xml 语法
  • 可以自定义插件,定制性更高更方便。

二、Gralde安装

2.1 Gradle wrapper

如果在练习 gralde 之前,使用过 Android Studio ,则就不需要安装 gralde 了,Android Studio 已经帮你下载安装好了。事实上 Android Studio 是借助 gradle wrapper 来下载指定版本的 gradle。具体是如何安装的,可以参考 gradle/wrapper

gralde 安装路径:

// Max Os or Linux Os
/home/username/.gradle/wrapper/dists

// Windows
C:\Documents and Settings<用户名>.gradle\wrapper\dists

2.2 Normal Install

先手动下载

然后配置系统路径:

// 为了方便管理,将下载的gradle全放在 /home/coxier/.gradle/wrapper/dists 下
unzip -d /home/coxier/.gradle/wrapper/dists gradle-3.4.1-bin.zip

// 在 ~/.zshrc中加入
export PATH=$PATH:/home/coxier/.gradle/wrapper/dists/gradle-3.4.1/bin

source ~/.zshrc

这里的gradle版本可以自己手动选择。

gradle -v

------------------------------------------------------------
Gradle 3.4.1
------------------------------------------------------------

Build time:   2017-03-03 19:45:41 UTC
Revision:     9eb76efdd3d034dc506c719dac2955efb5ff9a93

Groovy:       2.4.7
Ant:          Apache Ant(TM) version 1.9.6 compiled on June 29 2015
JVM:          1.8.0_111 (Oracle Corporation 25.111-b14)
OS:           Linux 4.4.0-59-generic amd64

三、Groovy 语言基础

在前面说过, gralde 的脚本文件需要使用 groovy 语言来写。现在来熟悉 groovy 的语法。

groovy 运行在 JVM 上,支持闭包和DSL,是一门非常灵活的动态脚本语言。

3.1 基本类型

groovy 的变量类型是运行时指定的,和 Py , Js 挺像的。而且 groovy 还可以支持类型的变化。

例如:

task printVar{
  def name = 'coxier'
  println name
  name = 10
  println name
}

输出:

coxier
10

groovy 特别灵活,比如上面的输出还可以像 shell script 写:

println "name = ${name}"

3.2 引用类型

groovy 支持大多数 java 语法,所以 groovy 可以和 java 混用。

class JavaGreeter {
    public void sayHello() {
        System.out.println("Hello Java!");
    }
}

JavaGreeter greeter = new JavaGreeter()
greeter.sayHello()

3.3 函数

def doubleIt(n) {
    n + n // Note we don't need a return statement
}

不需要声明参数的类型和返回类型。函数体中的最后一个表达式的值被返回。

3.4 闭包

groovy 支持闭包。闭包的基本思想是:将函数看成变量,其值可以像 string,number 一样被传递。

3.4.1 闭包的基本用法

def f = {
  println "HelloWorld"
}

f()
def s = f
s()

输出:

HelloWorld
HelloWorld

闭包对于参数的记法有所不同。像这样:

def doubleIt = {
  x -> x + x
}

println "doubleIt(5) = " + doubleIt(5)

上面说了函数可以看成变量,所以函数也可以作为另一个函数的参数。例如:

def applyTwice(func,arg) {
  func(func(arg))
}

println "5 * 4 = " + applyTwice(doubleIt,5)

当然我们也可以写的简单点:

def applyTwice = {
  func,arg->func(func(arg))
}

println "5 * 4 = " + applyTwice(doubleIt,5)

3.2 List

List 声明和遍历的方式如下:

def myList = ["Gradle", "Groovy", "Android"]
def printItem = {item -> println "List item: $item"}
myList.each(printItem)
// or
myList.each{println "Compactly printing each list item: $it"}