经过本章的阅读,了解Gradle中的任务和工程的关系,以及任务的定义和如何使用,接下来让咱们开始编写本身的任务代码进行工程打包操做吧。闭包
在Gradle的世界中最重要的两个概念就是:工程(Project)和任务(Task)。
每个Gradle的项目都会包含一个或多个工程,而每个工程的职责又取决于咱们对这个工程的定义,好比,一个工程多是公共的JAR库,或者是一个WEB的应用程序,也多是一个用于发布部署的ZIP包,而这个ZIP包又是经过其它工程编译打包的JAR文件组装成的。Gradle的编译思想跟maven同样, 也是约定优于配置,不过Gradle又比maven灵活,它为工程提供了不少具体的配置项。maven
每个工程又由一个或多个任务组成,一个任务表明了一个工做的最小单元,它能够是一次类的编译、打一个JAR包、生成一份Javadoc或者是向仓库中提交一次版本发布。函数
接下来咱们就一步步的了解如何定义和使用任务来实现不一样的编译打包功能,咱们会先在一个独立的工程中实现一些任务,而后再扩展到多个工程中去。工具
当咱们使用Gradle的命令时,好比gradle build
,Gradle命令会去寻找当前目录下的build.gradle的文件,这个文件是Gradle的脚本文件,它里面定义了工程和工程拥有的全部任务等信息。开发工具
咱们仍是使用IDEA开发工具打开以前的HelloWorld项目工程,把以前build.gradle文件中全部的内容所有删除,开始今天的任务编写。
首先咱们定义一个很简单的任务hello
,其代码以下:gradle
task hello { doLast { println 'Hello world!' } }
而后打开命令行端终,执行命令:gradle -q hello
,这时咱们看到控制台成功的打印输出了:Hello world!',以下图:ui
图一 hello任务的结果spa
在以上代码中,咱们定义了一个hello的任务,而后为它添加了一个动做(action),当执行gradle hello
命令时,该命令会调用hello任务,而后执行它的动做,打印输出了Hello world!,这个动做是一个groovy的闭包函数。
若是你们对ant熟悉的话,可能会以为Gradle的任务是否是和ant的类似?肯定是的,不过Gradle的任务比ant的灵活方便不少,在Gradle中咱们能够像写代码同样地实现不少ant很难实现的功能。命令行
对于上面hello任务的定义,咱们能够使用一种更简单便捷的方式实现。咱们能够使用<<
操做符来代替上面的doLast方法,以下:code
task hello << { println 'Hello world!' }
咱们能够定义一个任务依赖于某个其它的任务,好比一个发布(release)任务必须依赖编译(build)任务,代码以下:
task build { doLast { println "i'm build task" } } task release(dependsOn: build) { doLast { println "I'm release task" } }
而后再执行gradle -q release
,其输出结果以下:
图二 任务的依赖结果
task build { doLast { println "i'm build task" } } task release() { doLast { println "I'm release task" } } // 添任务依赖关系 release.dependsOn build
其执行结果图二同样。
task hello { doLast { println 'Hello World!' } } // 法方一,在doFirst动做中添加 hello.doFirst { println 'Hello doFirst' } // 法方二 在doLast动做中添加 hello.doLast { println 'Hello doLast1' } // 法方三 在doLast动做中添加 hello { doLast { println 'Hello doLast2' } }
执行gradle -q hello
其结果以下:
图三 添加动做行为结果
task hello { doLast { println "Hello world! from the $hello.name task." } }
执行gradle -q hello
其结果以下:
图四 访问任务的名称
另外咱们还能够为任务设置属性,主要经过ext.myProperty来初始化值,以下所示:
task myTask { ext.myProperty = "myValue" } task printTaskProperties { doLast { println myTask.myProperty } }
其输出结果为:
> gradle -q printTaskProperties myValue
task hello { doLast { int a = 1,b = 2; int result = add(a,b); println "a add b is = " + result; } } int add(int a,int b) { a + b; }
执行gradle -q hello
其结果以下:
图五 任务调用方法结果
使用Gradle编译工程,其实就是在编译不一样的任务,而后根据依赖关系组合执行,最后完成整个项目工程的打包发布。从工程和任务的关系,咱们也能看到Gradle把“分而治之”思想运用得恰到好处,实现中咱们一个项目可能包含若干个工程,这样使用Gradle就能很好的解决自动化地编译发布了。
请喜欢文章的同窗关注我,有任何问题都在下方给我留言,我将会一一回复,我会把gradle的入门使用作成一系列的文章不断的发布。
做者:云时代构架杨彪 连接:https://www.jianshu.com/p/a7b947c86650 来源:简书 简书著做权归做者全部,任何形式的转载都请联系做者得到受权并注明出处。