如何覆盖build.gradle中定义的属性?

Jef*_*nch 5 gradle

如何在build.gradle文件中设置属性并允许每个开发人员在本地覆盖它?我试过了:

gradle.properties:

MY_NAME = "Jonathon"
MY_COLOR = "blue"
Run Code Online (Sandbox Code Playgroud)

的build.gradle:

ext.MY_NAME = "John Doe"
task showit <<{
  println "MY_NAME[" + MY_NAME + "]";
  println "MY_COLOR[" + MY_COLOR + "]";
}
Run Code Online (Sandbox Code Playgroud)

gradle showit 得到:

:showit
MY_NAME[John Doe]
MY_COLOR["blue"]
Run Code Online (Sandbox Code Playgroud)

我认为在项目根目录下的gradle.properties文件中定义的属性将覆盖在build.gradle中定义的具有相同名称的属性,但这似乎不是这种情况.它只填补了遗失的财产.

小智 7

检查项目是否具有属性,如果没有,则将其设置为默认值:

ext {
    if (!project.hasProperty('MY_NAME')) {
        MY_NAME = 'John Doe'
    }
}
Run Code Online (Sandbox Code Playgroud)

请参阅:https://docs.gradle.org/current/userguide/build_environment.html#sub : checking_for_project_properties

如果需要为多个属性执行此操作,可以定义一个函数:

def setPropertyDefaultValueIfNotCustomized(propertyName, defaultValue) {
    if (!project.hasProperty(propertyName)) {
        ext[propertyName] = defaultValue
    }
}

ext {
    setPropertyDefaultValueIfNotCustomized('MY_NAME', 'John Doe')
}
Run Code Online (Sandbox Code Playgroud)