Gradle - 构建基础

subprojects {
    apply plugin:'java'
    repositories{
        jcenter()
    }
}

我们可以在rootProject中对子Project进行统一的配置,但是不要误以为subProjects只能配置,它们只是两个方法,接受一个闭包作为参数,对工程进行遍历。遍历的过程中调用我们自定义的闭包,所以我们可以在闭包里面配置、打印、输出或者修改Project的属性都可以。

1、Task创建

task customTask {
    doFirst {
        println "doFirst"
    }
    doLast {
        println "doLast"
    }
}

这里的task看着像是一个关键字,其实它是Project对象的一个函数。其中task为函数名,customTask为第一个参数,闭包为第二个参数。

    Task task(String name, Closure configureClosure);

另外一种创建任务的方式:

tasks.create(taskName){......}

2、Task依赖

创建任务的时候,可以通过dependsOn指定依赖的其他任务。

Task Api:

@Internal
    Set<Object> getDependsOn();

因此,我们在创建task的时候,在其闭包中对Task进行配置 - 闭包委托;

task customTask {
    dependsOn customTask1, customTask2
    doLast {
        println "multiTask"
    }
}

被依赖的任务会先执行,然后再执行当前任务。

3、Task间通过Api控制、交互

创建一个任务和定义一个变量一样,变量名就是我们定义的任务名,类型是Task。所以可以通过任务名,使用Task的Api访问它的方法、属性或对任务进行重新配置等。

由于脚本是顺序执行的,因此使用任务名操作任务之前,必须先定义声明。

task exeHello {
    println "hello"
}

exeHello.doFirst {
    println "hello - doFirst"
}

exeHello.doLast {
    println "hello - doLast"
}

直接通过任务名操纵任务的原理:

Project在创建该任务的时候,同时把该任务对应的任务名注册为Project的一个属性,类型名为Task。

exeHello.doLast {
    println project.hasProperty('exeHello')
}
--------------
true

我们可以通过project.hasProperty方法检查是否有这个属性。

既然可以通过Api操纵任务,那么当创建多个任务的时候,同样可以通过APi让它们相互访问,比如增加一些依赖等,就像两个变量相互访问一样。

4、自定义属性

Project和Task都允许用户添加额外的自定义属性,要添加额外的属性,通过应用属性对应的ext属性即可实现。添加之后可以通过ext属性对自定义属性读取和设置。

单个:
ext.age = 18
多个:
ext {
    name = "json"
    age = 18
}

相比于局部变量,自定义属性有更为广泛的作用域,你可以跨Project、跨Task访问这些自定义属性,只要你能访问这些属性所属的对象,那么这些属性都可以被访问到。

自定义属性不仅可以应用于Project和Task上,还可以应用在SourceSet中,这样等于每种SourceSet又多了一个可供配置的属性。

5、脚本即代码,代码也是脚本

虽然我们在一个gradle文件中写脚本,但是我们写的是代码,这一点要记清楚。这样你才能时刻使用Groovy、Java以及Gradle的任何语法和Api帮你完成你想做的事情。不要被脚本两个字限制了,是脚本没错,但是不是简单的脚本。在这个脚本文件上你可以定义Class、内部类、导入包、定义方法、常量、接口、枚举等,都是可以的,灵活运用。

------> 脚本文件中搭配Java、Gradle、Groovy,不要把它当成简单的脚本。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值