gradle配置_设置gradle离线_gradle离线配置(2)

电脑杂谈  发布时间:2017-01-08 12:03:29  来源:网络整理
task hello << {
    println "hello world"
}
这和前者是有区别的,“<<”意思是给hello这个task添加一些action,其实就是调用了task的doLast方法,所以,它和以下代码时等价的:
task hello {
    doLast{
        println "hello world"
    }
}

关于haha 和 hello的区别,你还可以这样加深影响:

首先,进入到你的工程目录,执行gradle (后面没有任何参数,另外,这个时候,build.gradle中同时有hello 和 haha 两个tasks),结果如下:

E:\android\androidwork2.0\GradleTest>gradle
haha
Incremental java compilation is an incubating feature.
:help

Welcome to Gradle 2.13.

To run a build, run gradle <task> ...

To see a list of available tasks, run gradle tasks

To see a list of command-line options, run gradle --help

To see more detail about a task, run gradle help --task <task>

BUILD SUCCESSFUL

Total time: 21.877 secs
E:\android\androidwork2.0\GradleTest>gradle tasks

可以按到haha,被打印了,而hello没有被打印,注意,这个时候默认执行的task 是help,也就是说并没有执行haha 这个task,可它还是被打印了,就说明使用定义haha 这种方式定义的task在初始化阶段就会被执行,而使用定义hello这种方法定义的task在执行阶段才会被执行。

在android studio的顶层build.gradle中有这样一个task:

task clean(type: Delete) {
    delete rootProject.buildDir
}
可以看到这个task有一个类型type,task有很多种类型的,以下列出来一些:

这里用到了delete类型,task的类型可以这样理解吧:task中文就是任务,任务有很多种类,Delete就是说这是个删除文件的任务。

这里就不更深入的探讨task了,这些类容已经可以使我们可以理解android studio中遇到的内容了。

另外一个很酷的点是closure的上下文是可以改变的,通过Closure#setDelegate()。这个特性非常有用:

def myClosure = {println myVar} //Im referencing myVar from MyClass class
MyClass hello = new MyClass()
myClosure.setDelegate(hello)
myClosure()

class MyClass {
    def myVar = Hello from MyClass!
}

#output: Hello from MyClass!
如上所示,创建closure的时候,myVar并不存在。但是没关系,因为当执行closure的时候,在closure的上下文中,myVar是存在的。这个例子中。因为在执行closure之前改变了它的上下文为hello,因此myVar是存在的。


本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/ruanjian/article-25073-2.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    • 完颜阿骨打
      完颜阿骨打

      华谊你少赚了吗

    热点图片
    拼命载入中...