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

时间:2020-10-29 19:04:39

标签: spring-boot freemarker

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

在此具有此文件:

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文件夹中加载,但这感觉很hack。

我做错某事还是这是预期的行为?

1 个答案:

答案 0 :(得分:1)

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

bootRun {
    sourceResources sourceSets.main
}

这是Spring Boot的Gradle插件的参考文档中的described

相关问题