我在我的应用程序中使用了freemarker模板
在将我的应用程序部署到jar文件之前,我需要做的就是加载我的模板:cfg.setDirectoryForTemplateLoading(new File("templates"));
从我在项目中创建的模板文件夹中加载了所有模板。
现在,在转移到maven并将我的应用程序部署到可执行jar之后。应用程序无法再找到此文件夹(我已在.jar文件中检查过,并且“templates”文件夹已部署在根目录中)
我已经尝试过所有我知道的事情,但没有运气。
我现在应该如何加载我的所有模板? (我假设如果我将文件夹放在.jar文件之外但在同一目录下它将起作用。但这不是我想要的。)
感谢。
答案 0 :(得分:24)
看看
void setClassForTemplateLoading(Class cl, String prefix);
...在FreeMarker manual chapter about template loading。
示例:
cfg.setClassForTemplateLoading(this.getClass(), "/templates");
...如果您的模板位于相对于当前类的根目录的templates
包中。
答案 1 :(得分:1)
上述
的替代方案cfg.setClassForTemplateLoading(this.getClass(), "/templates");
是
TemplateLoader ldr = new ClassTemplateLoader(classLoader, basePackagePath);
cfg.setTemplateLoader(ldr);
如果你需要从你的ftl处理器所属的其他罐子里加载东西,那么它会非常有用。
调用cfg.getTemplate(..)
可能会更方便,因为他们只需要相对于basePackagePath
答案 2 :(得分:0)
Configuration cfg;
private Template template;
{
cfg=new Configuration();
try {
cfg.setClassForTemplateLoading(this.getClass(), "/templates");
template = cfg.getTemplate("template.ftl");
}
这对我来说非常合适。这里我的templates文件夹包含template.ftl,它位于src / main / resources包下。