21

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

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

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

现在,在迁移到 Maven 并将我的应用程序部署到可执行 jar 之后。应用程序再也找不到这个文件夹(我已经在 .jar 文件中检查过,并且“模板”文件夹部署在根目录中)

我已经尝试了我所知道的一切,但没有运气。

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

谢谢。

4

3 回答 3

31

看一下

void setClassForTemplateLoading(Class cl, String prefix);

...在FreeMarker 手册中关于模板加载的章节中。

例子:

cfg.setClassForTemplateLoading(this.getClass(), "/templates");

...如果您的模板位于templates相对于当前类的根目录的包中。

于 2013-02-07T14:16:15.603 回答
2
Configuration cfg;
private Template template;  
    {
        cfg=new Configuration(); 
        try {
            cfg.setClassForTemplateLoading(this.getClass(), "/templates");
            template = cfg.getTemplate("template.ftl");
}

这对我来说非常有效。这里我的模板文件夹包含 src/main/resources 包下的 template.ftl。

于 2016-05-02T19:50:04.837 回答
1

上述的替代方案

cfg.setClassForTemplateLoading(this.getClass(), "/templates");

TemplateLoader ldr = new ClassTemplateLoader(classLoader, basePackagePath);
cfg.setTemplateLoader(ldr);

如果您需要从 ftl 处理器所属的 jar 之外的其他 jar 加载内容,这将很有用。

然后调用cfg.getTemplate(..)可能会更方便,因为它们只需要相对于 ftl 的路径basePackagePath

于 2017-08-25T06:38:54.077 回答