使用单独的数据文件来读取groovy

时间:2017-07-10 18:57:59

标签: variables groovy

我正在尝试将变量数据与我的实际脚本groovy文件分开。

def test = [a,b,c]
def test2 = ['foo': [a,x,y], 'bar': [q,w,e]]


def function(String var){}
def function2 {
test.each
{ 
    item ->
print test


}
}

因为变量中的值不断变化而不是脚本。如何让我的groovy读取变量文件并在运行时加载它?

我希望它看起来像这样。

variables.properties
def test = [a,b,c]
def test2 = ['foo': [a,x,y], 'bar': [q,w,e]]

main.groovy

load ( variable.properties)

def function(String var){}
def function2 {
test.each
{ 
    item ->
print test


}
}

1 个答案:

答案 0 :(得分:0)

在Groovy中,可以将数据评估为Groovy代码。这是一项强大的技术。对你的目标来说,这可能有点多,但是可行。

考虑这个config.data文件(它是一个Groovy文件,但可以命名为任何东西):

test = ['a','b','c']
test2 = ['foo': ['a','x','y'], 'bar': ['q','w','e']]

App.groovy文件。它在Binding中设置了GroovyShell个变量。 Config在shell中进行评估,我们可以在主应用程序中引用变量。

def varMap = [:]
varMap["test"] = [] 
varMap["test2"] = [:] 

def binding = new Binding(varMap)
def shell = new GroovyShell(binding)

def function2 = { test, test2 ->
    test.each { println "test item: ${it}" }
    test2.each { println "test2 item: ${it}" }
}

// ------ main

// load Config and evaluate it
def configText = new File(args[0]).getText()
shell.evaluate(configText)

def test = varMap["test"] 
def test2 = varMap["test2"] 

function2(test, test2)

示例用法:

$ groovy App.groovy config.data 
test item: a
test item: b
test item: c
test2 item: foo=[a, x, y]
test2 item: bar=[q, w, e]