是否可以在gradle构建脚本中使用嵌套属性来对全局变量进行分组?
如果gradle.properties
文件包含
mavenUpload.serverUrl=https://someServer.org/mavenrepository
我可以在像这个${mavenUpload.serverUrl}
这样的gradle脚本中使用它吗?或者像这样?
// in master gradle.build
task uploadArchives {
description = "Upload to maven repository '${mavenUpload.serverUrl}'."
// call all uploadArchives in the sub projects
dependsOn { subprojects.uploadArchives }
}
甚至可以动态创建像这样的嵌套属性
ext {
mavenUpload {
serverUrl='https://someServer.org/mavenrepository'
login='myUsername'
password='myTopSecretPassword'
}
}
有没有办法在gradle中做类似的事情?
我目前的解决方法是使用下划线“_”而不是点“。”
我在gradle 2.13中尝试了什么
ext {
// works as expected
myglobal='my global value'
// error :-(
myGlobalNested1 {
myNested='my nested value'
}
// error :-(
myGlobalNested2.ext {
myNested='my nested value'
}
// error :-(
myGlobalNested4.ext.myNested='my nested value'
// error :-(
myGlobalNested5.myNested='my nested value'
myGlobalNested3 = new HashMap<String,Object>()
}
// error :-(
myGlobalNested3.ext.myNested='my nested value'
task demo {
// works as expected
ext.mylocal='my local value'
print """
myglobal = ${myglobal}
mylocal = ${mylocal}
demo.mylocal = ${demo.mylocal}
myGlobalNested.myNested = ${myGlobalNested.myNested}
"""
}
[更新2016-06-11 @opal]
此脚本无法编译。 // error :-(
的部分导致编译错误
答案 0 :(得分:0)
我也在同一个问题上挣扎...
这怎么样?
ext {
parent = ext {
child = ext {
grandChild = ext {
greatGrandChild = "Kourtney"
}
grandChildBrother = "Khloé"
}
childSister = "Kim"
}
}
然后
task demo {
print """
child sister is ${this.ext.parent.childSister}
grand child brother is ${this.ext.parent.child.grandChildBrother}
great grand child is
${this.ext.parent.child.grandChild.greatGrandChild}
"""
}
祝你好运!
答案 1 :(得分:0)
我不建议在另外一个内部使用ext
。这将导致gradle产生一些非常奇怪的行为。对this question的最佳回答为我们提供了创建嵌套ext变量的正确方法。
这是在gradle中制作嵌套变量的正确方法
ext {
myarray = [
name0 : "xx",
name1 : "xx"
]
}