Java 正在.jar中加载freemarker模板文件夹
我在应用程序中使用freemarker模板 在将我的应用程序部署到jar文件之前,我需要做的就是加载模板:Java 正在.jar中加载freemarker模板文件夹,java,maven,freemarker,Java,Maven,Freemarker,我在应用程序中使用freemarker模板 在将我的应用程序部署到jar文件之前,我需要做的就是加载模板:cfg.setDirectoryForTemplateLoading(新文件(“模板”) 它加载了我在项目中创建的模板文件夹中的所有模板 现在,在迁移到maven并将我的应用程序部署到可执行jar之后。应用程序再也找不到这个文件夹了(我在.jar文件中进行了检查,“templates”文件夹部署在根目录中) 我已经尝试了我所知道的一切,但没有运气 我现在应该如何加载所有模板?(我假设如果我把
cfg.setDirectoryForTemplateLoading(新文件(“模板”)代码>
它加载了我在项目中创建的模板文件夹中的所有模板
现在,在迁移到maven并将我的应用程序部署到可执行jar之后。应用程序再也找不到这个文件夹了(我在.jar文件中进行了检查,“templates”文件夹部署在根目录中)
我已经尝试了我所知道的一切,但没有运气
我现在应该如何加载所有模板?(我假设如果我把文件夹放在.jar文件之外,但放在同一个目录中,它就会工作。但这不是我想要的。)
谢谢。看看
void setClassForTemplateLoading(Class cl, String prefix);
…在
例如:
cfg.setClassForTemplateLoading(this.getClass(), "/templates");
…如果您的模板位于相对于当前类根的templates
包中
Configuration cfg;
private Template template;
{
cfg=new Configuration();
try {
cfg.setClassForTemplateLoading(this.getClass(), "/templates");
template = cfg.getTemplate("template.ftl");
}
这对我来说非常有效。此处“我的模板”文件夹包含template.ftl,它位于src/main/resources包下。上述文件的替代文件
cfg.setClassForTemplateLoading(this.getClass(), "/templates");
是
如果您需要从ftl处理器所属的jar以外的jar加载内容,那么这将非常有用
调用cfg.getTemplate(..)
可能会更方便,因为他们只需要相对于basePackagePath
的ftl路径。我知道,他们实际上在那里讨论了这一点,但没有关于如何使用它的实际示例。你能帮我举个例子吗?我的模板在src/main/resources/templates文件夹中,但是java代码在src/main/java/com/app包中。在这种情况下,我应该如何引用templates文件夹?您可以将模板移动到src/main/resources/com/app/templates
,或者从this.getClass()
更改为XXX.class
,其中XXX
是src/main/java
下面的一个类,谢谢,你对资源文件夹的评论帮了我的忙。我错误地将模板放在java/
文件夹的根目录中。
TemplateLoader ldr = new ClassTemplateLoader(classLoader, basePackagePath);
cfg.setTemplateLoader(ldr);