将Groovy TemplateEngines与大(>;64k)模板一起使用
如何使用SimpleTemplateEngine或GStringTemplateEngine处理大于65535个字符的模板 我收到以下错误: groovy.lang.GroovyRuntimeException:未能分析模板脚本(模板可能包含错误或试图使用当前不支持的表达式):启动失败: SimpleTemplateScript1.groovy:5614:字符串太长。给定的字符串长度为198495个Unicode代码单位,但最多只允许65535个 我正在使用以下代码构建模板:将Groovy TemplateEngines与大(>;64k)模板一起使用,groovy,Groovy,如何使用SimpleTemplateEngine或GStringTemplateEngine处理大于65535个字符的模板 我收到以下错误: groovy.lang.GroovyRuntimeException:未能分析模板脚本(模板可能包含错误或试图使用当前不支持的表达式):启动失败: SimpleTemplateScript1.groovy:5614:字符串太长。给定的字符串长度为198495个Unicode代码单位,但最多只允许65535个 我正在使用以下代码构建模板: def templ
def templateEngine = new SimpleTemplateEngine()
def binding = [:]
templateEngine
.createTemplate(new FileReader("input.txt))
.make(binding)
.writeTo(new FileWriter(new File("output.txt")))
我发现与此问题相关的吉拉3487
我考虑了输入的组块,但是这带来了它自己的并发症,比如确保不要在表达式中间中断。
如果有其他建议,我将不胜感激。尝试使用
GStringTemplateEngine
。从javadoc:
处理模板源文件,替换变量和表达式
插入模板源文本中的占位符以生成所需的
使用流式方法输出。这台发动机有同等的发动机
SimpleTemplateEngine的功能,但创建模板
使用可写闭包使其在大型应用程序中更具可伸缩性
模板或在流式处理场景中
您可能只需将
新的SimpleTemplateEngine()
替换为新的GStringTemplateEngine()
,就可以成功,但当然应该对其进行测试 为GStringTemplateEngine
找到了一些替代品,它们可以处理大字符串
现在这是一个惊喜。在一些测试之后,如果模板中有一大块文本(>64K)不包含任何变量,那么它似乎失败了。至少,当变量分布到所有地方时,它在大约100K个文件上对我有效。但是,如果文本非常大(我在一个550K的文件中得到了这个文件,其中包含很多变量),那么与此类实现相关的另一个限制开始出现(方法太长)。真遗憾。这应该不太难做到,但似乎没有人对修复它很感兴趣。这里也有同样的问题。太糟糕了,这个问题无法解决。真糟糕。我不知道在寻找解决方案时我怎么会错过那个项目。显然,我的Google Fu需要工作。groovy-streaming-template-engine不适合我。对于我的大约250KB的模板,它失败了(java.lang.RuntimeException:方法代码太大!),与groovy内置的模板引擎完全相同。