1.Project和Task
在Gradle中,所有内容都是基于这两个概念:Projects和Tasks。
每个gradle的构建是由一个或多个project组成。一个project表示你希望Gradle为你做的一件事情。比如,打包jar文件或者web应用(war),或者是压缩为ZIP文件等等。
每个项目由一个或多个Task组成。一个Task表示构建过程中一个基本的细化工作。比如编译类、创建Jar文件、生成Javadoc等等。
接下来我们看看如何在一个Project中定义一些简单的Task。
2.Hello World
我们通过命令行来运行Gradle。在命令行中输入gradle命令会调用当前目录里面的build.gradle。我们将这个build.gradle称为构建脚本(build script),严格来讲,应该称为构建配置脚本。
第一个构建脚本:
build.gradle:
task hello { doLast { println 'Hello World!' } }
在控制台输入命令:gradle -q hello 即可运行名为hello的task。参数-q是表示只显示task的输出。
下面解释一下脚本内容,首先,task hello 定义一个叫hello的Task。doLast 表示在该Task执行完成后去执行doLast里面的脚本即:println 'Hello World!'
3.快捷的Task定义
有一种比上面更加快捷方便的Task定义方法,如下:
build.gradle:
task hello << { println 'Hello World!' }
这种定义方式跟第2节的doLast表示的是一模一样的意思,二者可以替换。
4.构建脚本代码
build脚本中,主要用到Groovy代码。在Task内部,运行的代码为Groovy代码,对Groovy不熟的同学可以先去了解一下Groovy。
在任务中使用Groovy示例如下:
build.gradle:
task upper << { String someString = 'mY_nAmE' println "Original: " + someString println "Upper case: " + someString.toUpperCase() }
运行结果如下:
我们再看一个使用Groovy循环的例子
task count << { 4.times { print "$it " } }
5.Task依赖
考虑这么一种情况,其中一个Task的运行必须在另一个Task之后。也就是Task1的运行必须依赖于Task2。接下来我们学习如何去实现这个目的。
代码如下:
task hello << { println 'Hello world!' } task intro(dependsOn: hello) << { println "I'm Gradle" }
运行结果如下:
从运行结果可以看出,在运行intro之前会运行hello。添加依赖时,并不需要被依赖的Task提前声明。比如下面的脚本是可以正常执行的。
<span style="font-size:18px;">task taskX(dependsOn: 'taskY') << { println 'taskX' } task taskY << { println 'taskY' }</span>
6.动态创建任务
使用Groovy可以动态生成多个Task,如下:
4.times { counter -> task "task$counter" << { println "I'm task number $counter" } }
上面创建了4个Task,分别为task1,task2,task3,task4,运行task1,如下:
7.同时操作多个Task
一旦Task被创建,那么他们就可以通过API来访问,比如,你可以在运行时动态依赖。
4.times { counter -> task "task$counter" << { println "I'm task number $counter" } } task0.dependsOn task2, task3
运行结果如下:
你也可以给已有的Task添加行为(Task执行之前、之后等等)
<span style="font-size:18px;">task hello << { println 'Hello Earth' } hello.doFirst { println 'Hello Venus' } hello.doLast { println 'Hello Mars' } hello << { println 'Hello Jupiter' }</span>
运行结果如下:
doFirst是在hello执行之前执行,doLast是在hello执行之后执行。<<与doLast是等价的,doLast按照顺序先后执行。
8.引用Task的名称
在Task执行时,可以获取指定Task的名称,如下所示:
<span style="font-size:18px;">task hello << { println 'Hello world!' } hello.doLast { println "Greetings from the $hello.name task." }</span>
运行结果如下:
9.外部属性
你可以给Task添加自定义的属性。在添加属性时需要给定一个初始值。如下所示:
task myTask { ext.myProperty = "myValue" } task printTaskProperties << { println myTask.myProperty }
运行结果如下:
10.默认Task
你可以给Gradle设置一个默认的Task,这样,如果没有指定运行那个Task,这会运行默认的Task。
defaultTasks 'clean', 'run' task clean << { println 'Default Cleaning!' } task run << { println 'Default Running!' } task other << { println "I'm not a default task!" }
运行如下:
好了,Gradle的基础就先讲这么多,个人觉得Groovy还是需要去稍微学习一下,毕竟Task里面一般是调用Groovy的函数,完全不懂Groovy的话没办法编写Task