Freemarker在maven生成的jar中加载模板

时间:2018-05-23 00:50:53

标签: java maven freemarker

让我澄清一下我目前的做法。我有一个maven项目,包体系结构如下所示:
的src /主/ JAVA / COM / gearon /应用程序/ App.java
的src /主/ JAVA / COM / gearon /应用/配置/ Config.java
的src /主/ JAVA / COM / gearon /应用程序/数据模型/ *。java的

我尝试使用下面的代码设置目录在Config.java中加载模板的目录:

    cfg = new Configuration();
    cfg.setClassForTemplateLoading(Config.class, "/templates");
    cfg.setDefaultEncoding("UTF-8");
    cfg.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER);

我已将模板放在 src / main / java / com / gearon / app / templates 下 该体系结构是 src / main / java / com / gearon / app / templates / * .ftl

如果我直接使用main方法运行代码,它可以正常工作。但是,当我将项目打包到jar中时,它无法加载模板,错误如下所示:

java.io.FileNotFoundException: Template "index.ftl" not found.

我想知道把那些tempaltes放在哪里。

1 个答案:

答案 0 :(得分:0)

嗯,基于对Freemarker official site

手册的研究
  

void setClassForTemplateLoading(Class cl,String basePackagePath)and   void setClassLoaderForTemplateLoading(ClassLoader classLoader,String   basePackagePath):这些用于何时通过加载模板   与Java加载类相同的机制(来自类路径,   就像他们过去含糊地说的那样)。这很可能是首选   加载生产代码模板的方法,因为它允许您   将所有内容保存在部署jar文件中。第一个参数   决定使用哪个Java ClassLoader。第二个参数   在/ -separated中指定包含模板的包   格式。请注意,如果您不使用/启动它,它将被解释   相对于Class参数的包。

注意事项是重要的:

  

请注意,如果您不使用/启动它,则会对其进行解释   相对于Class参数的包。

改变后  cfg.setClassForTemplateLoading(Config.class, "/templates");

cfg.setClassForTemplateLoading(Config.class, "templates");

一切都像魅力一样好。