使用 groovy GStringTemplateEngine() 循环模板

looping a template using groovy GStringTemplateEngine()

我的要求是创建一个模板引擎以支持其中的循环

最终模板 应如下所示:

#cat output.template 
env:
  - name : param1 
    value : 1
  - name : param2 
    value : 2

我有伪代码来解释我的要求

def f = new File('output.template')
def engine = new groovy.text.GStringTemplateEngine()

def mapping = [
    [ name : "param1",
      value : "1"],
    [ name : "param2",
      value : "2" ]
] // This mapping can consists of a multiple key value pairs.

def Template = engine.createTemplate(f).make(mapping) 

println "${Template}"

谁能帮我如何实现模板内循环的这个要求,我应该如何修改我的模板?

*更新:tim_yates 提供的所有解决方案Eduardo Melzer 导致以下输出在模板末尾带有额外的空行。这可能是什么原因?* 解决方案提供商是否无法看到此行为,或者问题仅出在我的系统上?

# groovy loop_template.groovy 
env:
  - name: param1
    value : 1 
  - name: param2
    value : 2 


root@instance-1:

将您的模板文件更改为如下所示:

#cat output.template
env:<% mapping.eachWithIndex { v, i -> %>
  - name : ${v.name}
    value : ${v.value}<% } %>

如您所见,您的模板文件需要一个名为 mapping 的输入参数,因此您需要将主要代码更改为如下内容:

    def f = new File('output.template')
    def engine = new groovy.text.GStringTemplateEngine()

    def mapping = [
        [ name : "param1", value : "1"],
        [ name : "param2", value : "2"]
    ] // This mapping can consists of a multiple key value pairs.

    def Template = engine.createTemplate(f).make([mapping: mapping])

    println "${Template}"

输出:

#cat output.template
env:
  - name : param1
    value : 1
  - name : param2
    value : 2