Загрузка шаблона шаблонов freemarker внутри .jar
Я использую шаблоны freemarker в своем приложении
перед развертыванием моего приложения в файл jar, все, что мне нужно было сделать, чтобы загрузить мои шаблоны, было следующим: cfg.setDirectoryForTemplateLoading(new File("templates"));
который загрузил все шаблоны из папки шаблона i, созданной внутри моего проекта.
Теперь, перейдя на maven и развернув мое приложение в исполняемую банку. Приложение больше не может найти эту папку (я проверил внутри .jar файла, а папка "шаблоны" развернута прямо в корневом каталоге)
Я попробовал все, что знаю. но не повезло.
как именно я должен загрузить все мои шаблоны сейчас? (я предполагаю, что если я поместил папку вне файла .jar, но в том же каталоге она будет работать, но это не то, что я хочу.)
Спасибо.
Ответы
Ответ 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