使用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。
我做错某事还是这是预期的行为?
答案 0 :(得分:1)
您可以配置bootRun
,以便从其源位置加载源。假设模板是主源集的一部分,即它们位于src/main/resources
中,则配置如下:
bootRun {
sourceResources sourceSets.main
}
这是Spring Boot的Gradle插件的参考文档中的described。