0

次のような config.groovy がある場合、Groovy 2.0.7 を使用します。

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

また、デフォルトの proxy.host プロパティの後に switch ステートメントを配置することもできます...

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

OK、うまくいく解決策があります。

switch ステートメントを関数にラップし、スクリプトの上部 (関数の下、ネストされたスコープ プロパティの上) で関数を呼び出し、最後に関数を再度呼び出しました。

粗雑で恐ろしいですが、機能します。誰かがより良い解決策を持っている場合は、私に知らせてください!

于 2013-11-07T14:36:35.810 に答える