这在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模板,但面临同样的问题)
答案 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
实例转换为此类对象。