freemaker:使用 class 加载程序从不同路径读取模板

freemaker: read template from different path using class loader

我的 TemplateLoader class 在路径 src/main/java 我的模板文件位于 src/resources/template

当我尝试使用以下代码加载模板时

Configuration config = new Configuration(Configuration.DEFAULT_INCOMPATIBLE_IMPROVEMENTS);
        config.setClassForTemplateLoading(this.getClass(), "/");

Template template = config.getTemplate( "resources/template/test.ftl");

它给出以下错误:

freemarker.template.TemplateNotFoundException: Template not found for name "resources/template/test.ftl".

文件位于正确的位置。那么如何使用免费标记加载此文件?

问题是 resources 仅存在于您的源代码中(这是 Maven 的东西),但不存在于已编译的项目中。所以应该是config.getTemplate( "template/test.ftl");。但是,如果先使用 config.setClassForTemplateLoading(this.getClass(), "/template"); 然后使用 config.getTemplate( "test.ftl"); 会更好。拥有模板根目录的目的是使实际位置透明,并防止模板包含并因此暴露不是模板的任意资源的安全问题。