Groovy模板解析错误:未知类型:IMPORT

时间:2016-07-30 18:54:29

标签: groovy

我试图通过groovy.text.StreamingTemplateEngine(Groovy v2.4.7)处理一个非常简单的模板。以下是模板文件的全部内容:

<% import org.yaml.snakeyaml.Yaml %>

我知道这不会产生任何输出。我只是想让导入工作。

我收到此错误:

Caught: groovy.text.TemplateParseException: Template parse error 'Unknown type: IMPORT at line: 1 column: 146. File: StreamingTemplateScript1.groovy ' at line 1, column 4
 --> 1: <% import org.yaml.snakeyaml.Yaml %>

以下是正在进行处理的groovy代码:

#!/usr/bin/env groovy

def engine = new groovy.text.StreamingTemplateEngine()
def tmplt

if (args.length == 1) {
  tmplt = engine.createTemplate(new File(args[0])).make()
}
else {
  tmplt = engine.createTemplate(new BufferedReader(new InputStreamReader(System.in))).make()
}

println tmplt.toString()

根据我对Groovy模板的理解,包括处理模板的groovy脚本中的导入将不起作用(也尝试过)。我见过其他人(显然)成功地做了我想做的事。

我做错了什么?

请注意,我在grails之外这样做。

1 个答案:

答案 0 :(得分:1)

回答了我自己的问题。根据StreamingTemplateEngine的Groovy文档:

  

此引擎具有与SimpleTemplateEngine 相同的功能,但使用可写闭包创建模板,使其更适合大型模板。

这显然不正确,因为它不理解import。要在Groovy模板中导入库,必须改为使用SimpleTemplateEngine。

我通过设置Apache Tomcat和Groovy Server Pages(没有grails)来确定GSP是否可以执行导入。他们能。 GSP使用https://github.com/groovy/groovy-core/blob/master/subprojects/groovy-servlet/src/main/java/groovy/servlet/TemplateServlet.java,它使用SimpleTemplateEngine。