《Gradle 权威指南》读书笔记——第三章 Gradle 构建脚本基础

8 篇文章 0 订阅

Setting文件
Setting.gradle,用于初始化和工程树的配置.

//定义了两个子项目,并为他们指定了目录的位置,如果不配置则默认目录为其同级的目录
rootProject.name=''
include':example02'
project(':example02').projectDir=new File(rootDir,'chapter01/example2')
include':example03'
project(':example03').projectDir=new File(rootDir,'chapter01/example3')

每个Project都会有一个Build文件,RootProject也不例外.
RootProject可以获取到所有的子项目,所以我们可以在RootProject的build中为所有子项目统一配置,比如应用的插件,依赖的maven中心等等

subproject{  // 子项目
    apply plugin:'java'
    repositories{
        jcenter()
    }   
}
allprojects{
​
}
​

Task
创建一个Task

//其实是project.task(String taskName,Closure<> closure)
task cc {
    println "in create task"
    doFirst{
        println "doFirst"
    }
    doLast{
        println "doLast"
    }
}

任务的依赖

task cc {
    //println "cc mid"
​
    doFirst{
        println "cc doFirst"
    }
    doLast{
        println "cc doLast"
    }
}

//单个依赖

task bb(dependsOn:cc){
    doFirst{
        println "bb doFirst"
    }
    doLast{
        println "bb doLast"
    }
}

//多个依赖

task ccc{
    //println "ccc mid"
    dependsOn cc,bb
    doFirst{
        println "ccc doFirst"
    }
    doLast{
        println "ccc doLast"
    }
}

脚本语言是先声明后使用
通过任务名操纵任务的原理是: Project 在创建任务的时候,同时把该任务对应的任务名注册为 Project 的属性

自定义属性
Project和Task都允许用户添加额外的自定义属性;
要添加多个自定义属性可以通过代码块实现;
即是通过应用所属的对应的 ext 属性即可实现,添加之后可以通过对 ext 对自定义属性读取设置。
//project的属性

ext.name="xiaohuang"

//闭包实现多个属性的添加

ext{
    age=18
    num=18
}
task printExt {
    //task也有个name属性,就是TaskName,所以需要
    println "age=$age,name=$project.name,num=$num"
}


相比局部变量,自定义属性有更广大的作用范围,你可以通过跨 Project 和跨 Task 来访问这些属性;
自定义还可以应用在 SourceSet 中,使用 productFlavors 来定义多个渠道的时候,除了main SourceSet还会新增很多SourceSet

apply plugin:"java"
sourceSets.all{
    //为sourceSets.中的每一个sourceSet初始化一个sourceDir属性
    ext.sourceDir=null;
}
sourceSets{
    //创建多个sourceSet,并赋予属性
    main{
        sourceDir="mianDir"
    }
    test{
        sourceDir="testDir"
    }
}
task pp  {
    sourceSets.each{
        println it.sourceDir
    }
}


一般可用于自定义版本号和版本名称,我们会把它放在一个独立的gradle文件中,便于管理

脚本即代码,代码即脚本
虽然Gradle是脚本,但我们需要时刻记得我们的写的都是代码,
所以我们可以使用Groovy、Java Gradle的任何语法和api实现我们想做的事
定义Class、内部类、导入包、定义方法、常量、接口、枚举

def String getTime(){
    def date=new Date();
    def dateString =date.format("yyyy-MM-dd")
    return dateString
}
task pp {
    sourceSets.each{
        println it.sourceDir +getTime()
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Annoke

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值