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这个字段:
tasks | The 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
发表回复