Details
Description
在springboot中,我将模板文件test.ftl放在src/main/resources/templates/
调用Freemarker API操作模板,主要步骤如下:
Configuration cfg = new Configuration(Configuration.VERSION_2_3_22);
File templateConfigDir = new File(this.getClass().getResource("/templates").getFile());
cfg.setDirectoryForTemplateLoading(templateConfigDir);
Template temp = cfg.getTemplate("test.ftl");
此时模板文件的路径是src/main/resources/templates/ ,在IDEA中测试没有问题。
但是当我把springboot工程打成jar包测试时,会得到一个异常:java.io.FileNotFoundException: file:\C:\Users\Administrator\Desktop\ts\app-1.0.0-SNAPSHOT.jar!\BOOT-INF\classes!\templates does not exist.
查看原因,这个目录是jar包中的一个目录,此时无法访问到这个目录。
我的处理方式是:运行代码时,要将模板文件通过流的方式拷贝到工程外的一个目录,然后设置Freemarker:
cfg.setDirectoryForTemplateLoading("工程外的配置目录");
希望Freemarker可以提供一个重载API,不需要设置setDirectoryForTemplateLoading,生成Template对象时直接传入模板流(InputStream)。