热门搜索 :
考研考公
您的当前位置:首页正文

Gradle学习-7/19笔记

来源:东饰资讯网

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
Top