0

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

那么http://defaultproxy即使我指定了“localhost”环境,URL 也将始终存在。

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

4

2 回答 2

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
于 2014-09-10T09:39:15.033 回答
0

好的,我有一个可行的解决方案。

我将 switch 语句包装成一个函数,然后在脚本顶部调用该函数(函数下方,嵌套范围属性上方),然后在底部再次调用该函数。

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

于 2013-11-07T14:36:35.810 回答