我试图通过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之外这样做。
答案 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。