【问题标题】:Loading freemarker templates folder inside .jar在 .jar 中加载 freemarker 模板文件夹
【发布时间】:2013-01-23 01:42:25
【问题描述】:

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

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

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

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

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

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

谢谢。

【问题讨论】:

    标签: java maven freemarker


    【解决方案1】:

    上述的替代方案

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

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

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

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

    【讨论】:

      【解决方案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。

      【讨论】:

      • 谢谢,您对资源文件夹的评论对我有用。我错误地将模板放在java/ 文件夹的根目录中。
      【解决方案3】:

      看看

      void setClassForTemplateLoading(Class cl, String prefix);
      

      ...在FreeMarker manual chapter about template loading.

      例子:

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

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

      【讨论】:

      • 我明白了,他们实际上在那里谈论这个,但没有关于如何使用它的实际示例。你能帮我举个例子吗
      • 我的模板在 src/main/resources/templates 文件夹中,但是 java 代码在 src/main/java/com/app 包中。在这种情况下,我应该如何引用模板文件夹?
      • 您可以将模板移动到src/main/resources/com/app/templates 或从this.getClass() 更改为XXX.class,其中XXXsrc/main/java 下的一个类
      猜你喜欢
      • 2011-05-11
      • 2013-03-18
      • 2018-11-01
      • 2016-07-19
      • 2019-11-19
      • 2011-02-25
      • 1970-01-01
      • 1970-01-01
      • 2011-10-15
      相关资源
      最近更新 更多