让我澄清一下我目前的做法。我有一个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放在哪里。
答案 0 :(得分:0)
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");
一切都像魅力一样好。