Gradle入门

一、在Windows平台安装

在系统变量中添加GRADLE_HOME


image.png

然后再将%GRADLE_HOME%\bin添加到path系统变量中就可以了,运行gradle -v命令来进行验证。


image.png

二、实现HelloWorld

build.gradle为Gradle默认的构建脚本文件,运行Gradle 命令时,会从当前目录下寻找 build.gradle 文件来执行构建。
先创建一个目录,E:\Android|gradle_demo,在其中创建build.gradle文件,并在其中输入:

task hello {
    doLast {
        println 'Hello world!'
    }
}

然后在该文件所在目录下运行gradle -q hello构建脚本, 就会打印出“Hello world!”。


image.png

task(任务)和action(动作)是Gradle的重要元素。上面的代码中,task代表一个独立的原子性操作,比如复制一个文件,编译一次Java代码,这里我们简单的定义一个名为hello的任务。doLast 代表task执行的最后一个action,通俗来讲就是task执行完毕后会回调doLast中的代码,在上面这个例子中就会打印 'Hello world!'

上面的例子还可以写的更简单一点,用到了操作符<<,效果是一样的。

三、Gradle任务

这里简单的介绍下Gradle的任务,包括创建任务、任务依赖、 动态定义任务和任务的分组和描述。

1.创建任务

除了上述例子的那种创建任务方式,还有三种创建方式。
(1)直接用任务名称创建

def Task hello=task(hello)
hello.doLast{
    println "Hello World!"
}

(2)任务名称+任务配置创建

def Task hello=task(hello,group:BasePlugin.BUILD_GROUP)
hello.doLast{
    println 'Gradle'
}

(3)TaskContainer的create方法创建

tasks.create(name: 'hello') << {
    println 'hello world'
}

此前创建任务的方式最终都会调用tasks的create方法,其中tasks类型为TaskContainer。

2.任务依赖
任务依赖会决定任务运行的先后顺序,被依赖的任务会在定义依赖的任务之前执行。

task hello << {
    println 'Hello world'
}

task go(dependsOn:hello) << {
     println "go for it"
}

在hello任务的基础上增加了一个名为go的任务,通过dependsOn来指定依赖的任务为hello,因此go任务运行在hello之后。
运行gradle -q go构建脚本,打印结果如下:
Hello world!
go for it

3.动态定义任务

动态定义任务指的是在运行时来定义任务的名称

3.times {number ->
    task "task$number" << {
        println "task $number"
    }
}

这里用到了Groovy语法,关于Groovy语法会在本系列后续的文章进行介绍。times是Groovy在java.lang.Number中拓展的方法,是一个定时器。3.times中循环创建了三个新任务,隐式变量number的值为0,1,2,任务的名称由task加上number的值组成,达到了动态定义任务的目的。
运行gradle -q task2构建脚本,打印结果如下:
task 2

4.任务的分组和描述

Gradle有任务组的概念,可以为任务配置分组和描述,以便于更好的管理任务,拥有良好的可读性。
改造2的例子,为任务hello添加分组和任务描述。

task hello{
    group='build'
    description='hello world'
    doLast{
           println "Task Group:${group}"
           println "Task Description:${description}"

    }

}

task go(dependsOn:hello) << {
    println "go for it"

}

也可以采用其他的创建方式来为任务添加分组和描述。

def Task hello=task(hello)
hello.description ='hello world'
hello.group=BasePlugin.BUILD_GROUP
hello.doLast{
    println "任务分组: ${group}"
    println "任务描述: ${description}"
}
task go(dependsOn: hello) << {
    println "go for it"
}

四、Gradle日志级别

和Android一样,Gradle也定义了日志级别。

image

前面我们通过gradle -q +任务名称来运行一个指定的task,这个q是命令行开关选项,通过开关选项可以控制输出的日志级别。

image

五、Gradle命令行
从命令行的角度,Gradle和Git类似,命令都可以用一些IDE、图形工具来代替,但是如果你对Gradle 命令行熟悉,会帮助你更好的理解Gradle,高效的运用Gradle。

1.获取所有任务的信息
如果我们不知道任务的名称,可以通过gradle -q tasks来获取所有的任务信息,这样就不用打开源码了。


image.png

默认情况下,只会显示那些被分组的任务的名称和描述。比如Build tasks(Build 任务组)中有我们定义的hello任务,Build Setup tasks中有init和wrapper,Help tasks有buildEnvironment 和components等等。

2.排除任务
如果不想运行go任务,可以运行gradle hello -x go命令:


image.png

可以看出,并没有运行go任务。

3.获取任务帮助信息
通过运行gradle -q help --task hello命令来显示hello任务的帮助信息。


image.png

可以看到hello任务的路径、类型、描述和分组。

4.多任务调用

task helloWorld << {
    println 'Hello world!'
}

task goForit << {
    println "go for it"
}

通过命令行一次执行多个任务,每个任务通常只会执行一次,无论是在命令行中指定任务还是任务依赖,上面的例子我们运行gradle helloWorld goForit,会先执行helloWorld任务后执行goForit任务。


image.png

5.任务名称缩写
可以对使用驼峰命名的任务进行缩写,对于名称特别长的任务这个特性非常有用,比如5.4小节中的例子只需要执行gradle hW gF 就可以了,不过需要注意一点,那就是任务名称的缩写必须是唯一的,如果5.4小节中第二个任务的名称为helloWangshu,那么就会报错。


image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,590评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,808评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,151评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,779评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,773评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,656评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,022评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,678评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,038评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,756评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,411评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,005评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,973评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,053评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,495评论 2 343

推荐阅读更多精彩内容

  • Gradle是一款非常优秀的构建系统工具,它的DSL基于Groovy实现,可以让你很方便的通过代码控制这些DSL来...
    飞雪无情flysnow_org阅读 3,506评论 0 35
  • 在 Android Studio 构建的项目中,基于 Gradle 进行项目的构建,同时使用 Android DS...
    Ant_way阅读 7,322评论 0 16
  • 是什么? 在语法上是基于Groovy语言的(Groovy 是一种基于JVM的敏捷开发语言,可以简单的理解为强类型语...
    千山万水迷了鹿阅读 99,452评论 4 122
  • 理解Gradle脚本 当然我们现在讨论的所有内容都是基于Android studio的,所以请先行下载相关工具。当...
    木木00阅读 856评论 1 12
  • 今天,同事们互相请吃东西,有晚饭,有水果,有很辣的鸭脖。 对于辣的,还能吃一点的我,一边嘴里说着,好辣,一边吃的正...
    木颜紫阅读 289评论 2 1