2013-02-07 48 views
13

我使用的FreeMarker模板在我的應用加載的freemarker模板內的.jar

文件夾部署我的應用程序JAR文件之前,所有我需要的,以便做到裝載我的模板是這樣的:cfg.setDirectoryForTemplateLoading(new File("templates"));

其中加載了我在我的項目中創建的模板文件夾中的所有模板。

現在,移動到maven並將我的應用程序部署到可執行jar。應用程序不能再找到這個文件夾(我已經檢查了.jar文件,並且「模板」文件夾被部署在根目錄中)

我已經嘗試了我所知道的一切。但沒有運氣。

我到底應該如何加載所有模板? (我假設如果我把該文件夾放在.jar文件之外,但是在同一個目錄下它將會工作,但這不是我想要的。)

謝謝。

回答

23

看一看

void setClassForTemplateLoading(Class cl, String prefix); 

...在FreeMarker manual chapter about template loading

例子:

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

...如果你的模板位於相對於當前類的根templates包英寸

+0

我看到,他們實際上談論這個有,但對如何使用這個沒有實際的例子。可以請你幫我一個例子 – Gleeb

+0

看我更新的答案 –

+0

我會檢查出來。謝謝 – Gleeb

0
Configuration cfg; 
private Template template; 
    { 
     cfg=new Configuration(); 
     try { 
      cfg.setClassForTemplateLoading(this.getClass(), "/templates"); 
      template = cfg.getTemplate("template.ftl"); 
} 

這對我來說非常合適。這裏我的模板文件夾包含在src/main/resources包下的template.ftl。

0

所提到的

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

另一種方法是

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

,如果你需要加載其他罐子的東西比你的FTL處理器屬於其中之一可能是有用的。然後

呼叫至cfg.getTemplate(..)也許會更方便,因爲他們只需要在路徑相對FTL到basePackagePath