使用Groovy的ConfigSlurper读取具有嵌套闭包的配置文件

时间:2011-12-06 02:48:40

标签: groovy closures config dsl

我想用Groovy的ConfigSlurper解析闭包的数据结构(在本例中是一个配置文件)。解析结果将存储在类似于数据结构的对象层次结构中。关于这种数据结构唯一特别的事实是一些闭包名称在一个闭包内重复,例如applegreen。我看起来ConfigSlurper在内部使用Map来替换现有的值。我想知道ConfigSlurper是否真的能够处理这些类型的数据结构。我使用的Groovy版本是1.7.10。或者,我尝试使用GroovyShell来执行闭包,但在执行顺序方面存在一些问题。

String rules = """ 
fruits {
    apples {
        apple {
            id = 11

            colors {
                green {
                    name = 'test1'
                }

                green {
                    name = 'test2'
                }
            }            
        }

        apple {
            id = 12

            colors {
                green {
                    name = 'test3'
                }

                green {
                    name = 'test4'
                }
            } 
        }
    }
}
"""

ConfigSlurper configSlurper = new ConfigSlurper()
def config = configSlurper.parse(rules)
println config

1 个答案:

答案 0 :(得分:1)

我能够使用GroovyShell解析这些规则。需要执行规则的每个闭包。传入的Binding对象允许您检索值。对于重复的闭包,我必须将闭包的resolveStrategy更改为Closure.DELEGATE_FIRST