Подтвердить что ты не робот

Загрузка шаблона шаблонов freemarker внутри .jar

Я использую шаблоны freemarker в своем приложении

перед развертыванием моего приложения в файл jar, все, что мне нужно было сделать, чтобы загрузить мои шаблоны, было следующим: cfg.setDirectoryForTemplateLoading(new File("templates"));

который загрузил все шаблоны из папки шаблона i, созданной внутри моего проекта.

Теперь, перейдя на maven и развернув мое приложение в исполняемую банку. Приложение больше не может найти эту папку (я проверил внутри .jar файла, а папка "шаблоны" развернута прямо в корневом каталоге)

Я попробовал все, что знаю. но не повезло.

как именно я должен загрузить все мои шаблоны сейчас? (я предполагаю, что если я поместил папку вне файла .jar, но в том же каталоге она будет работать, но это не то, что я хочу.)

Спасибо.

4b9b3361

Ответ 1

Посмотрите

void setClassForTemplateLoading(Class cl, String prefix);

... в главе FreeMarker о загрузке шаблона.

Пример:

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

... если ваши шаблоны расположены в пакете templates относительно корня текущего класса.

Ответ 2

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

Это отлично сработало для меня. Здесь моя папка шаблонов содержит template.ftl, которая находится под пакетом src/main/resources.

Ответ 3

Альтернатива указанному

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

является

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

который может быть полезен, если вам нужно загрузить материал из других банок, чем тот, к которому принадлежит ваш ftl-процессор.

Звонки на cfg.getTemplate(..) тогда, возможно, будут более удобными, так как им нужен только путь к ftl относительно basePackagePath