Groovy:使用GStringTemplateEngine()在模板引擎中的多个循环
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Groovy:使用GStringTemplateEngine()在模板引擎中的多个循环相关的知识,希望对你有一定的参考价值。
这个问题是继续我之前发布过的earlier question。
为了进一步增强我的模板,我需要在模板引擎中有多个循环,并且需要从从配置文件派生的HashMap变量中替换值。
我的HashMap看起来像这样,让我们说envVar
:
envVar = [
PROJECT:name,
env:[
[name:param1, value:value1],
[name:param2, value:value2],
[name:param3, value:value3]],
ports:[
[protocol:port1, port:1000],
[protocol:port2, port:2000]]
]
我的模板引擎如下所示:
- env:
<< NEED TO LOOP HERE WITH env variables
- name : param1
value : value1
....
>>
project: "${PROJECT}"
......
......
......
ports:
<< NEED TO LOOP HERE WITH ports variables
- port: 1000
protocol : port1
....
>>
代码段如下所述。
def f = new File('output.template')
def engine = new groovy.text.GStringTemplateEngine()
//....
//envVar are derived from another file
//....
def Template = engine.createTemplate(f).make(envVar)
println "${Template}"
有人可以解释我如何修改上面的代码片段和模板,以确保在模板引擎中正确替换envVar。
答案
你需要为每个变量做一个each
。您的模板文件需要如下所示:
#cat output.template
- env:<% env.each { v -> %>
- name : ${v.name}
value : ${v.value}<% } %>
project: "${PROJECT}"
......
......
......
ports:<% ports.each { v -> %>
- port: ${v.port}
protocol: ${v.protocol}<% } %>
然后,您的主脚本应如下所示:
def f = new File('output.template')
def engine = new groovy.text.GStringTemplateEngine()
def envVar = [
PROJECT: name,
env:[
[name:'param1', value:'value1'],
[name:'param2', value:'value2'],
[name:'param3', value:'value3']
],
ports:[
[protocol:'port1', port:1000],
[protocol:'port2', port:2000]
]
]
def Template = engine.createTemplate(f).make(envVar)
println "${Template}".trim()
输出:
#cat output.template
- env:
- name : param1
value : value1
- name : param2
value : value2
- name : param3
value : value3
project: "projectName"
......
......
......
ports:
- port: 1000
protocol: port1
- port: 2000
protocol: port2
另一答案
要浏览您的env变量,您可以使用以下内容:
envVar.env.each{
println "name : ${it.name}"
println "value : ${it.value}"
}
envVar.ports.each{
println "port : ${it.port}"
println "protocol : ${it.protocol}"
}
以上是关于Groovy:使用GStringTemplateEngine()在模板引擎中的多个循环的主要内容,如果未能解决你的问题,请参考以下文章
GroovyGroovy 代码创建 ( 使用 Java 语法实现 Groovy 类和主函数并运行 | 按照 Groovy 语法改造上述 Java 语法规则代码 )