在groovy中解析属性文件,其中键包含点(。)并用作模板绑定

时间:2017-01-11 10:30:43

标签: templates groovy

这在Java世界中很常见,其中包含键中带有点(。)的属性文件。 Maven和Gradle自然地解决了这个问题,但现在我需要在普通的groovy中做到这一点:

def propertiesFileContent = 'a.b=http://my.com/test'
def templateContent = 'Testing ${a.b} '

def props = new Properties()
props.load(new StringReader(propertiesFileContent))
def template = new groovy.text.SimpleTemplateEngine().createTemplate(templateContent)
println template.make(props)

以上代码会引发异常,因为模板引擎威胁$ {a.b}为' b' ' a'的领域对象并且不接受' a.b = http://my.com/test'来代替。 首先我认为这是一个groovy模板中的错误,但现在看来这是一个众所周知的限制,并且每个人都建议需要修改模板的解决方案:

我的情况是我应该这样做而没有机会修改属性文件或模板本身:它们是TAGged和发布的应用程序版本:-( 如果不可能,是否有解决方案或解决方法? (我尝试使用FreeMarker模板,但面临同样的问题)

1 个答案:

答案 0 :(得分:3)

看看groovy.util.ConfigSlurper#parse(java.util.Properties)。用法:

template.make(new ConfigSlurper().parse(props))

template.make()需要一个包含模板属性的对象,例如:

[a: [b: 'http://my.com/test']] 

ConfigSlurper完全可以将Properties实例转换为此类对象。