spring-boot-starter-freemarker 没有找到模板

spring-boot-starter-freemarker does not find templates

在没有进一步配置的情况下使用 spring-boot-starter-freemarker 我希望能够从默认模板路径 (src/resources/tempaltes) 加载模板(注意它是 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 */)).

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

所以,我知道我们现在可以手动配置 freemarker 以从 src 文件夹加载,但这感觉很糟糕。

我是在做 s/th 错误还是这是预期的行为?

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

bootRun {
    sourceResources sourceSets.main
}

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