Project对象
Project属性
1. 访问属性
Gradle执行项目的build文件(build.gradle),生成一个Project对象。你写的脚本所使用的属性和方法都会被委托给这个Project对象。我们能够在我们的脚本中直接使用Project的属性和方法。
例子:
name="Hello" //委托给Project.name
reportsDir = file('reports') //委托给Project.file()
2. 属性域
一个Project具有5个属性域(scope),通过属性域可以很方便地访问属性。以下是5个属性域:
- Project固有属性域
这个属性域中包含Project实现类中声明的属性的getters和setters。例如,Project.getRootProject()表示访问rootProject属性。这些属性是否可读可写取决于它们的getter或setter是否存在。 - 扩展属性域(Extra Properties)
每个project都维护者一个扩展属性的map,这个map可以包含任意的键值对。 - 插件的扩展属性域
- convention properties(貌似也是一个由插件扩展出的属性域,从官方文档中没看懂介个是什么意思,懂得兄弟可以解释下)
- project的tasks域
一个task可以通过task的name直接访问。这个域中的属性都是只读的。
属性读写方式:
读属性或写属性时,project都会按顺序从上述域中搜索,在搜索到的第一个域中读出或写入。
3. Extra Properties
所有的Extra Properties必须通过"ext"命名空间来定义,即定义的时候加前缀"ext."。一旦一个属性通过这种方式定义后,在该project下(包含其子工程sub-projects)可以直接访问。
示例代码
//初始化需要"ext."
println "init"
project.ext.prop1 = 'hello'
task doStuff{
println "doStuff Start"
//再次访问不需要前缀
println prop1
prop1 = 'doStuff_hello'
println "doStuff End"
}
allprojects{
println prop1
}
结果
init
doStuff Start
hello
doStuff End
doStuff_hello