使用 USCavalry 转换器将 Velocity 模板转换为 FreeMarker

Converting Velocity template into FreeMarker using USCavalry converter

我有大量 Velocity 模板要转换为 FreeMarker。

我找到了一个名为 USCavalry 的转换器工具,它声称可以完成这项工作。

我在 IntelliJ 中将其设置为 Maven 项目,并将 Velocity 和 Freemarker 依赖项添加到我的 pom.xml。

工具 运行 很好,但我对得到的输出不满意。它似乎是 AST 的标记化输出。不替换正确的 FreeMarker 符号。

还有其他人 运行 关注这个问题吗?您更改了什么以获得有意义的 FreeMarker 模板作为输出?

我将尝试修改源以输出 Velocity 的成果以外的东西 RuntimeServices.parse(),但我认为如果其他人已经解决了这个问题,这可能会有所帮助。

USCavarlry 是一个非常简单的工具,也非常过时(链接的网页是 10 年前的快照,也许它在那时就已经过时了)。对于非常基本的事情,它似乎是有效的(比如 #if($x == 1)$y#end 被翻译成 <#if x == 1>${y}</#if>,至少对我来说是这样)。正确的自动翻译即使在理论上也是不可能的,即使做得一半也很棘手(就像你必须考虑语义差异,比如在 if 条件下什么才算是逻辑真,必须识别调用广泛使用的 Velocity 工具并将它们转换为 ?xxx 表达式等)。据我所知,不存在这样的工具。因此,这主要是一项手动任务,需要手工制作正则表达式替换和所有...或者您必须修改 USCavalry 源代码,以更快者为准。