spring-boot-starter-freemarker 找不到模板

问题描述 投票:0回答:2

使用

spring-boot-starter-freemarker
而无需进一步配置,我希望能够从默认模板路径(
src/resources/templates
)加载模板(注意它是
src/...
而不是
build/...
)。

这里有这个文件:

src/resources/templates/emails/welcome.ftl

尝试将其加载为模板:

// some service class
  @Autowired
  private Configuration freemarkerConfig;

  public void doStuff() {
    Template t = freemarkerConfig.getTemplate("emails/welcome.ftl");
    // ...
  }

失败并显示此错误消息:

freemarker.template.TemplateNotFoundException: Template not found for name "emails/welcome.text.ftl".
The name was interpreted by this TemplateLoader: MultiTemplateLoader(loader1 = FileTemplateLoader(baseDir="/some/path/backend/build/resources/main/templates", canonicalBasePath="/some/path/backend/build/resources/main/templates/"), loader2 = ClassTemplateLoader(resourceLoaderClass=org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer, basePackagePath="" /* relatively to resourceLoaderClass pkg */)).

所以配置看起来还不错,但它使用的是

src
文件夹而不是
build
文件夹。当通过
./gradlew bootRun
运行时,我们看到错误。执行
./gradlew build
然后
./gradlew bootRun
找到模板 - 因为它们现在位于
build
文件夹中。但对于开发来说,如果不需要完全重建,我们将不胜感激。

所以,我知道我们现在可以手动配置 freemarker 以从

src
文件夹加载,但这感觉很hacky。

我做错了什么还是这是预期的行为?

spring-boot freemarker
2个回答
1
投票

您可以配置

bootRun
以便从源位置加载源。假设模板是主源集的一部分,即它们位于
src/main/resources
中,配置如下:

bootRun {
    sourceResources sourceSets.main
}

Spring Boot 的 Gradle 插件的参考文档对此进行了描述。


0
投票
尝试使用完整路径,我尝试了很多选项。但这立刻就起了作用。

这是我的代码示例:

FileTemplateLoader templateLoader = new FileTemplateLoader(new File("/Users/user/Downloads/lamoda-monitor 2/src/main/resources")); configuration.setTemplateLoader(templateLoader); freemarker.template.Template template = configuration.getTemplate("response.ftl");
    
© www.soinside.com 2019 - 2024. All rights reserved.