freemarker宏定义引用路径解决方案

Posted svygh123

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了freemarker宏定义引用路径解决方案相关的知识,希望对你有一定的参考价值。

编写代码生成器的时候,假如模板文件夹是templates

宏代码路径:D:/workspace/JavaGen/templates/macro.ftl

现在有一个$ClassNameController.java在以下路径

D:/workspace/JavaGen/templates/ctrl/$ClassNameController.java

$ClassNameController.java需要引用macro.ftl

Configuration cfg = new Configuration(Configuration.VERSION_2_3_29);
// templateDir=D:/workspace/JavaGen/templates/ctrl
cfg.setDirectoryForTemplateLoading(new File(templateDir));

cfg.setDefaultEncoding("UTF-8");
cfg.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER);
cfg.setLogTemplateExceptions(false);
cfg.setWrapUncheckedExceptions(true);
cfg.setFallbackOnNullLoopVariable(false);
        
Template temp;
temp = cfg.getTemplate(templateName); // templateName=$ClassNameController.java

使用上面的代码就会报错,因为路径问题而找不到macro.ftl

正确代码如下

Configuration cfg = new Configuration(Configuration.VERSION_2_3_29);
// templateDir=D:/workspace/JavaGen/templates
cfg.setDirectoryForTemplateLoading(new File(templateDir));

cfg.setDefaultEncoding("UTF-8");
cfg.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER);
cfg.setLogTemplateExceptions(false);
cfg.setWrapUncheckedExceptions(true);
cfg.setFallbackOnNullLoopVariable(false);
        
Template temp;
temp = cfg.getTemplate(templateName); // templateName=ctrl/$ClassNameController.java

$ClassNameController.java引用macro.ftl如下:

<#include "/macro.ftl" />

以上是关于freemarker宏定义引用路径解决方案的主要内容,如果未能解决你的问题,请参考以下文章

springboot整合freemarker自动加载宏

转 freemarker macro(宏)的使用

Freemarker 嵌套宏

检查 FreeMarker 中的变量类型

freemarker 自己定义指令

是否可以通过编程方式创建 Freemarker 宏?