在ConfigSlurper中指定环境时,我可以使用嵌套作用域吗?

时间:2013-11-07 14:14:20

标签: groovy

使用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

我真的需要两者的功能!有谁知道我怎么能做到这一点?

2 个答案:

答案 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语句包装到一个函数中,然后调用脚本顶部的函数(在函数下面,在嵌套的作用域属性上面),然后在底部再次调用该函数。

原油,可怕,但有效。如果有人有更好的解决方案,请告诉我!