使用Groovy 2.0.7时,我有一个config.groovy,例如: -
def configText = """
switch(environment) {
case 'localhost':
PROXY {
HOST = "localproxy"
}
break
}
PROXY {
HOST = "defaultproxy"
}"""
def config = new ConfigSlurper("localhost").parse(configText)
,当我这样做时,我得到一个断言失败: -
assert "localproxy" == config.PROXY.HOST
如果我删除“defaultproxy”行,则会正确返回环境值。
我做错了吗?这对我来说是一个标准要求,要为config.PROXY.HOST指定一个默认值,但能够在环境切换块中覆盖它。
我知道我可以使用环境构造函数来覆盖值,但这对我没用,因为它不允许我评估值,例如如果我有: -
PROXY {
HOST = "defaultproxy"
URL = "http://" + HOST
}
然后即使我指定了“localhost”环境,URL也总是http://defaultproxy
。
我真的需要两者的功能!有谁知道我怎么能做到这一点?
答案 0 :(得分:1)
您也可以将switch语句放在默认的proxy.host属性...
之后def configText = """
PROXY {
HOST = "defaultproxy"
}
switch(environment) {
case 'localhost':
PROXY {
HOST = "localproxy"
}
break
}
"""
def config = new ConfigSlurper("localhost").parse(configText)
assert "localproxy" == config.PROXY.HOST
或者你可以像这样利用环境属性:
def configText = """
PROXY {
HOST = "defaultproxy"
}
environments{
localhost{
PROXY.HOST='localproxy'
}
}
"""
def config = new ConfigSlurper("localhost").parse(configText)
assert "localproxy" == config.PROXY.HOST
答案 1 :(得分:0)
好的,我有一个有效的解决方案。
我将switch语句包装到一个函数中,然后调用脚本顶部的函数(在函数下面,在嵌套的作用域属性上面),然后在底部再次调用该函数。
原油,可怕,但有效。如果有人有更好的解决方案,请告诉我!