在没有进一步配置的情况下使用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 */)).因此,配置似乎还不错,但它使用的不是src文件夹,而是build文件夹。通过./gradlew bootRun运行时,我们会看到错误。执行./gradlew build,然后执行./gradlew bootRun,就可以找到模板--因为它们现在在build文件夹中。但是对于开发来说,不需要完全重新构建是非常感激的。
因此,我知道我们现在可以手动配置freemarker从src文件夹加载,但这感觉很麻烦。
我是做错了还是这是预期的行为?
发布于 2020-10-29 20:17:23
您可以配置bootRun,以便从其源位置加载源。假设模板是主源集的一部分,即它们在src/main/resources中,则配置如下:
bootRun {
sourceResources sourceSets.main
}这是Spring的Gradle插件参考文档中的所述。
https://stackoverflow.com/questions/64597638
复制相似问题