如何在build.gradle文件中设置属性并允许每个开发人员在本地覆盖它?我试过了:
gradle.properties:
MY_NAME = "Jonathon"
MY_COLOR = "blue"
的build.gradle:
ext.MY_NAME = "John Doe"
task showit <<{
println "MY_NAME[" + MY_NAME + "]";
println "MY_COLOR[" + MY_COLOR + "]";
}
gradle showit
给出:
:showit
MY_NAME[John Doe]
MY_COLOR["blue"]
我认为在项目根目录下的gradle.properties文件中定义的属性会覆盖在build.gradle中定义的具有相同名称的属性,但似乎并非如此。它只能填补遗失的财产。
答案 0 :(得分:6)
检查项目是否具有属性,如果没有,则将其设置为默认值:
ext {
if (!project.hasProperty('MY_NAME')) {
MY_NAME = 'John Doe'
}
}
请参阅: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')
}
答案 1 :(得分:1)
我认为你可以定义一个局部变量,然后像这样覆盖它
def dest = "name"
task copy(type: Copy) {
from "source"
into name
}
请参阅this doc
答案 2 :(得分:1)
类似于Johan Stuyts' answer,但单线:
ext.MY_NAME = project.properties['MY_NAME'] ?: 'John Doe'
运行gradle -PMY_NAME="Jeff F." showit
会得到MY_NAME[Jeff F.]
。
运行gradle showit
会得到MY_NAME[John Doe]
。
答案 3 :(得分:0)
我自己碰到了这个。我的用例是我分叉项目存储库,而我的同事却没有。我需要将axion-release的存储库远程设置为upstream
而不是origin
。
我不想传递args(或创建别名/ shell函数),所以最终在gradle.properties
(GRADLE_USER_HOME
)中创建了~/.gradle
并添加了一个属性(名称无关紧要)在那里以及项目的gradle.properties
中。在gradle.build
中,我总是使用该属性since it always exists。
~/.gradle/gradle.properties
scmVersionRepositoryRemote=upstream
[project-root]/gradle.properties
scmVersionRepositoryRemote=origin
[project-root]/build.gradle
scmVersion {
repository {
remote = scmVersionRepositoryRemote
}
}