在.jar中加载freemarker模板文件夹

时间:2013-02-07 14:09:49

标签: java maven freemarker

我在我的应用程序中使用了freemarker模板

在将我的应用程序部署到jar文件之前,我需要做的就是加载我的模板:cfg.setDirectoryForTemplateLoading(new File("templates"));

从我在项目中创建的模板文件夹中加载了所有模板。

现在,在转移到maven并将我的应用程序部署到可执行jar之后。应用程序无法再找到此文件夹(我已在.jar文件中检查过,并且“templates”文件夹已部署在根目录中)

我已经尝试过所有我知道的事情,但没有运气。

我现在应该如何加载我的所有模板? (我假设如果我将文件夹放在.jar文件之外但在同一目录下它将起作用。但这不是我想要的。)

感谢。

3 个答案:

答案 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

的ftl路径

答案 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包下。