四: 理解build.gradle配置

build.gradle脚本对应于Project instance。要了解build.gradle可配置些什么,就得去看Project instance具体包含哪些属性域

Project instance跟编程语言中的object类似,既提供了property,也提供了method。在Gradle中还提供了另外一个特殊的工具,script blocks,本质是一种格式特殊的method

build.gradle脚本的编写过程,就是设置这些property, 调用method或者script blocks的过程

1. Properties

可以通过build.gradle设置Project的Properties,就像设置java类中的field一样。Properties列表中的字段很多,比如说tasks这个字段:

tasksThe tasks of this project.

我们点击tasks连接,查看下定义,tasks的类型是TaskContainer

TaskContainer tasks (read-only)

我们再看看TaskContainer。其中有很多method都可以调用,其中一个熟悉的就是

register(name, configurationAction)

因此,我们就可以在build.gradle脚本中配置tasks这个property了:

tasks.register('mytask') {
       ...
}

通过调用tasks的register函数,注册了一个task

又比说另外一个更简单的例子 ,通过赋值设置任意的property:

project.ext.prop1 = "foo"

2. Method

build.gradle脚本可以调用Project Instance中提供的Methods。就跟正常调用函数一样。比如说以下method返回project下文件的URI路径:

uri(path)

那么就可以在build.gradle中调用该函数

project.uri("src")

3. Script blocks

Script blocks我们之前提到,可理解为一种特殊的函数,Instance的script blocks是固有属性,各个instance的block是不同的,通过查阅文档,可以了解Instance对应的script block。调用script block的目的,同样为了配置instance

比如说Project有repositories这个script block,因此我们可以这样调用,添加一个仓库到project instance中

repositories {
    // Use Maven Central for resolving dependencies.
    mavenCentral()
}

测试

综上所述,我们编写一个build.script,同时使用到project的properties, method和script block:

//Script block调用
repositories {
    // Use Maven Central for resolving dependencies.
    mavenCentral()
}

//设置property
project.ext.prop1 = "foo"

//设置property
tasks.register('mytask') {
   // Method调用
   println "Method call uri: ${project.uri('src')}"
   //输出script block调用的结果
   println "Script block repositories:"
   project.repositories.each { println "Name: " + it.name + "; url: " + it.url }
   println "Property prop1: ${project.ext.prop1}"
}

输出结果为:

$ gradle mytask
Configuration on demand is an incubating feature.
Method call uri: file:/Users/lc/gradletest/app/src/
Script block repositories:
Name: MavenRepo; url: https://repo.maven.apache.org/maven2/
Property prop1: foo

BUILD SUCCESSFUL in 1s

Ref



发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

About Me

一位程序员,会弹吉他,喜欢读诗。
有一颗感恩的心,一位美丽的妻子,两个可爱的女儿
mail: geraldlee0825@gmail.com
github: https://github.com/lisuxiaoqi
medium: https://medium.com/@geraldlee0825