Gradle project 属性定义的两种方式

在看下面代码时,首先你要对gradle 的默认的项目结构和属性传递有一定了解。

1. 扩展属性

使用 ext 命名空间

  • 定义
project.ext.myProp = 'myValue'

ext {
  someOtherProp = 123
}
  • 使用
project.someOtherProp

2. 属性文件

Gradle 属性可以通过在gradle.properties 文件中声明直接添加到项目中。

# gradle.properties
exampleProp = myValue
someOtherProp = 455

其中扩展属性只能在rootProject 中被定义,并且subProject 会被传递。在subProject中定义无效(所以不会有覆盖的情况)。

项目结构
  rootProject {
    :app 
    :library 
  }

定义扩展属性
rootProject.ext.prop = 123 

结果
/*
  app.prop : 123  //传递
  library.prop : 123  //传递
*/

rootProject 中定义的扩展属性会在:app:library 中都有效。

属性文件,可以在rootProject中定义,也可以在subProject 中定义。

项目结构
rootProject {
  :app 
  :library 
}

定义扩展属性
rootProject#gradle.properties {
  prop = rootProject
}
app#gradle.properties {
  prop = app
}

结果
/*
  app.prop : app  // 覆盖
  library.prop : rootProject //传递
*/

如何将一个.gralde文件的函数给其他文件使用

// 定义在 `test.gradle`
def sayHello() {
    println("sayHello")
}

ext {
    sayHello = this.&sayHello
}

// 使用在 `build.gradle`
apply from: './test.gradle'

// 我想在这里调用 test.gradle 文件中的 sayHello() 函数
sayHello()
点赞