Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 正在.jar中加载freemarker模板文件夹_Java_Maven_Freemarker - Fatal编程技术网

Java 正在.jar中加载freemarker模板文件夹

Java 正在.jar中加载freemarker模板文件夹,java,maven,freemarker,Java,Maven,Freemarker,我在应用程序中使用freemarker模板 在将我的应用程序部署到jar文件之前,我需要做的就是加载模板:cfg.setDirectoryForTemplateLoading(新文件(“模板”) 它加载了我在项目中创建的模板文件夹中的所有模板 现在,在迁移到maven并将我的应用程序部署到可执行jar之后。应用程序再也找不到这个文件夹了(我在.jar文件中进行了检查,“templates”文件夹部署在根目录中) 我已经尝试了我所知道的一切,但没有运气 我现在应该如何加载所有模板?(我假设如果我把

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

在将我的应用程序部署到jar文件之前,我需要做的就是加载模板:
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);