我定义使用在根项目的build.gradle
中包含一个变量的字符串,并且我想在不同子项目的build.gradle
s中以不同的方式定义该变量的值。
根build.gradle
:
ext {
diet4jActivationClass = 'xxx'
}
subprojects {
...
publishing {
publications {
maven(MavenPublication) {
from(components.java)
pom {
properties = [
'diet4j.activationclass': "${diet4jActivationClass}"
]
}
}
}
}
}
子项目的build.gradle
:
ext {
diet4jActivationClass = 'yyy'
}
POM属性始终使用值xxx
生成,而永远不会使用yyy
生成。我该怎么做?
答案 0 :(得分:1)
默认情况下,根项目将先于子项目进行评估。因此,根项目中的subprojects {...}
块将在子build.gradle
文件评估之前进行评估。因此,在评估subprojects {...}
块时,该属性没有覆盖。
您可以在根项目中调用evaluationDependsOnChildren()
来取消顺序,但我不建议这样做,因为它可能导致其他问题。
也许您可以使用闭包来延迟对属性的评估?
另一种选择是在根build.gradle中声明属性,而不是在子项目build.gradle中声明。
例如:
project(':xxx') {
ext {
diet4jActivationClass = 'xxx'
}
}
project(':yyy') {
ext {
diet4jActivationClass = 'yyy'
}
}
subprojects {...}
或者另一种选择是使用afterEvaluate {...}
闭包(我真的很讨厌这种方法,但是有时这是唯一的方法)
subprojects {
afterEvaluate {...}
}